Имена файлов должны быть от 0.jpg до 149.jpg
Используйте следующую команду PowerShell:
dir *.jpg | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args[0].Value.PadLeft(20) }) } | foreach-object -begin { $count=0 } -process { rename-item $_ -NewName "$count.jpg"; $count++ }
Заметки:
$count=0
начать отсчет с 0
.
$_
представляет каждый элемент, переданный команде rename-item через канал |
из команды dir
.
foreach-object
позволяет установить переменную ($count
) перед циклическим просмотром каждого файла в каталоге (соответствие *.jpg
), а затем выполнить действие (rename-item
) для каждого соответствующего элемента.
Чтобы отсортировать вывод dir
в "естественном" порядке, мы используем:
Sort-Object { [regex]::Replace($_.Name, '\d+', { args[0].Value.PadLeft(20) }) }
Пример:
PS F:\test> dir *.jpg
Directory: F:\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 01/04/2016 19:39 54 1.jpg
-a--- 01/04/2016 19:39 54 10.jpg
-a--- 01/04/2016 19:39 52 11.jpg
-a--- 01/04/2016 19:39 54 2.jpg
-a--- 01/04/2016 19:39 54 3.jpg
-a--- 01/04/2016 19:35 52 4.jpg
-a--- 01/04/2016 19:35 52 5.jpg
-a--- 01/04/2016 19:39 51 6.jpg
-a--- 01/04/2016 19:39 51 7.jpg
-a--- 01/04/2016 19:39 54 8.jpg
-a--- 01/04/2016 19:39 52 9.jpg
PS F:\test> dir *.jpg | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args[0].Value.PadLeft(20) }) } | foreach-object -begin { $count=0 } -process { rename-item $_ -NewName "$count.jpg"; $count++}
PS F:\test> dir *.jpg
Directory: F:\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 01/04/2016 19:39 54 0.jpg
-a--- 01/04/2016 19:39 54 1.jpg
-a--- 01/04/2016 19:39 52 10.jpg
-a--- 01/04/2016 19:39 54 2.jpg
-a--- 01/04/2016 19:35 52 3.jpg
-a--- 01/04/2016 19:35 52 4.jpg
-a--- 01/04/2016 19:39 51 5.jpg
-a--- 01/04/2016 19:39 51 6.jpg
-a--- 01/04/2016 19:39 54 7.jpg
-a--- 01/04/2016 19:39 52 8.jpg
-a--- 01/04/2016 19:39 54 9.jpg
PS F:\test>
Источник: пакетное переименование файлов с помощью Windows PowerShell. Скрипт был изменен в соответствии с требованиями вопроса.
Источник: Как отсортировать по имени файла так же, как это делает проводник Windows? Ответ Романа Кузьмина на естественную сортировку.