Подтвердить что ты не робот

Как объединить файлы и переименовать с помощью PowerShell?

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

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

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

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

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

Если это звучит скорее как OCD, чем хорошая идея, пожалуйста, говорите.

4b9b3361

Ответ 1

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

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

Если вы ищете "базовое имя", и если вы используете 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

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

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