Командлет Rename-Item изменяет имя указанного файла по заданному пути. Если конкретный путь не был задан — под действие командлета попадают файлы, расположенные рядом с выполняемым скриптом PS1.
Немного болтологии
Прежде всего: чтобы выполнять любые скрипты PowerShell в системе — необходимо понизить политику безопасности выполнения скриптов. Я обычно применяю политику Unrestricted. Она отвечает за выполнение всех скриптов, но будет уведомлять при выполнении скрипта без цифровой подписи.
Если необходимо отключить любые уведомления можно применить политику Bypass.
Запретить выполнение скриптов можно параметром Restricted.
Итак, разрешаем выполнение скриптов:
Set-ExecutionPolicy Unrestricted -Force
Непосредственно сабж
Теперь уже можно приступать к реализации темы данного поста.
Для начала приведу очень нужную конструкцию — замену пробелов на символ нижнего подчёркивания в именах файлов (в данной команде обрабатываются только текстовые файлы формата txt):
dir *.txt | ren -NewName { $_.Name -replace ' ','_' }
Теперь реализуем счётчик в имени файла и вынесем нужные параметры в переменные:
$format = "txt"
$name = "File_"
dir *.$format | % {$i=1} {ren $_ -NewName ("$name{0:000#}.$format" -f $i++)}
Переменная format задаёт формат файла для обработки. Это обезопасит нас от повального переименования всего содержимого в папке.
Переменная name задаёт префикс для названия файла.
В результате выполнения этой конструкции, названия файлов будут иметь вид: File_0001.txt, File_0002.txt и т.д.
В формировании команд были использованы следующие псевдонимы командлетов:
| Командлет | Псевдоним |
|---|---|
| Rename-Item | ren |
| Get-ChildItem | dir |
| ForEach-Object | % |
Полный список доступных псевдонимов в PowerShell можно получить выполнив — Get-Alias.