Как объединить файлы и переименовать с помощью 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, чем хорошая идея, пожалуйста, говорите.
Ответы
Ответ 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