У меня есть папки с изображениями (* .png и * .jpg)
>C:\Directory\Folder1
01.png
02.png
03.jpg
04.jpg
05.png
И я хочу переименовать все файлы следующим образом, используя powershell:
>C:\Directory\Folder1
Folder1 - 01.png
Folder1 - 02.png
Folder1 - 03.jpg
Folder1 - 04.jpg
Folder1 - 05.png
Итак, я придумал эту простую строку:
Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png"} | rename-item -newname {$_.Directory.Name +" - " + $_.Name}
Если в папке будет 35 или менее файлов, у меня будет нужный результат, но если будет 36 или более файлов, я получу следующее:
>C:\Directory\Folder1
Folder1 - Folder1 - Folder1 - 01.png
Folder1 - Folder1 - Folder1 - 02.png
Folder1 - Folder1 - Folder1 - 03.jpg
Folder1 - Folder1 - Folder1 - 04.jpg
Folder1 - Folder1 - Folder1 - 05.png
Цикл останавливается, когда имя файла превышает 248 символов.
Есть идеи, почему это зацикливается?
РЕДАКТИРОВАТЬ: Как предложено, простое решение состоит в том, чтобы проверить, если имя папки уже добавлено к имени файла:
Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png" -and !$_.Name.StartsWith($_.Directory.Name) } | rename-item -newname {$_.Directory.Name +" - " + $_.Name}
Но это не говорит мне, почему это зацикливание, когда в папке более 36 файлов.