#windows #powershell #batch-rename #rename-item-cmdlet
#Windows #powershell #пакетное переименование #переименовать-элемент-командлет
Вопрос:
Я могу пакетно переименовывать файлы в рабочем каталоге, используя:
Dir | %{Rename-Item $_ -NewName ("0{0}.wav" -f $nr )}
Однако я хочу, чтобы переименование файла начиналось с чего-то отличного от нуля. Скажите 0500 и переименуйте последовательно по порядку.
Dir | %{Rename-Item $_ -NewName ("0{500}.wav" -f $nr )}
возвращает ошибку.
Как я могу указать переименовывать, чтобы оно начиналось с числа, отличного от 0?
Комментарии:
1. просто инициализируйте счетчик начальным номером, например
$nr = 500
. Кроме того, просто делаяDir
это, вы играете с огнем, потому что это даст вам все файлы и папки в текущем каталоге. Лучше добавьте путь, фильтр файлов и-File
переключатель, чтобы он только переименовывался. wav-файлы:(Get-ChildItem -Path '<TheFolder>' -Filter '*.wav' -File)
2. добавление
$nr = 500
в начале также возвращает ошибку. Я не против делать все,Dir
так как я знаю, что находится в рабочем каталоге, и запускаю его только тогда, когда мне это нужно. Добавление пути к файлу иногда может быть длинным и громоздким
Ответ №1:
Вы можете заранее инициализировать счетчик на 500. Кроме того, для этого вам не нужно использовать цикл ForEach-Object ( %
), потому NewName
что параметр может принимать scriptblock .
Важно здесь то, что вам нужно поместить Get-ChildItem
часть в квадратные скобки, чтобы завершить ее перед переименованием элементов, в противном случае вы можете попытаться переименовать файлы, которые уже были переименованы.
$nr = 500
(Get-ChildItem -Path 'D:Test' -Filter '*.wav' -File) | Rename-Item -NewName { '{0:D4}{1}' -f ($script:nr ), $_.Extension }
Комментарии:
1. хорошо, я подумал, что цикл избавит от необходимости беспокоиться о переименовании файлов, которые уже были переименованы. Но в вашем примере вы передаете путь, я не хочу этого, так как я уже буду в рабочем каталоге, и повторный ввод каталога может быть обременительным.
2. @Фернан, тогда оставь путь