Как перебирать файлы и переименовывать с помощью PowerShell? - PullRequest
20 голосов
/ 06 октября 2009

Я хотел бы переименовать все файлы jpg в папке в единое соглашение, например Picture00000001.jpg, где 00000001 - это счетчик.

Это будет прогулка по парку в C #, но я думаю, что это тот тип хлеба и масла, для которого был создан PowerShell.

Я предполагаю что-то вроде

$files = ls *.jpg
$i=0
foreach($f in $files) { Rename-Item $f -NewName "Picture"+($i++)+".jpg" }

Но перед тем, как начать работу, я бы хотел 1) отформатировать счетчик и 2) почувствовать, что это даже хорошая идея.

Если это больше похоже на ОКР, чем на хорошую идею, пожалуйста, говорите.

Ответы [ 2 ]

24 голосов
/ 06 октября 2009

Вы можете сделать это довольно просто в PowerShell:

ls *.jpg | Foreach -Begin {$i=1} `
   -Process {Rename-Item $_ -NewName ("Picture{0:00000000}.jpg" -f $i++) -whatif}

Если вы ищете "basename" и , если вы используете PowerShell 2.0, просто используйте свойство Basename, которое PowerShell добавляет к каждому объекту FileInfo:

ls *.jpg | Format-Table Basename

Обратите внимание, что в PowerShell 1.0 Расширения сообщества PowerShell добавляет то же свойство Basename.

Если вы хотите добавить строку счетчика к базовому имени файла во время операции переименования, попробуйте следующее:

ls *.jpg | Foreach {$i=1} `
   {Rename-Item $_ -NewName ("$($_.Basename){0:00000000#}.jpg" -f $i++) -whatif}
2 голосов
/ 06 октября 2009

Попробуйте, чтобы получить FilenameWithOutExtension

$ f.DirectoryName + "\" + $ f.BaseName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...