1

У меня есть папки с изображениями (* .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 файлов.

1 ответ1

0

Казалось бы, переименование выглядит как новый файл цикла, и поэтому оно обрабатывается снова.

Попробуйте ввести дополнительный тест для того, чтобы остановить его, глядя на любой файл, начинающийся с "Папка 1".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .