Префікс файлів з поточним ім'ям каталогу за допомогою Powershell


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 символів.

Будь-які ідеї, чому це цикл?

EDIT: Як було запропоновано, просте рішення - перевірити, чи ім'я папки вже додано до імені файлу:

Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png" -and !$_.Name.StartsWith($_.Directory.Name) } | rename-item -newname {$_.Directory.Name +" - " + $_.Name}

Але це не говорить мені, чому це цикл, коли є більше 36 файлів в папці.

Відповіді:


0

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

Спробуйте поставити додатковий тест, де його можна зупинити, дивлячись на будь-який файл, що починається з "Folder 1".


Я змінив код, щоб перевірити, чи ім'я папки вже було додано, але я все ще не розумію, чому цей поріг 36 робить цикл. Я прийму це як відповідь, якщо ніхто не придумає пояснення до цієї помилки.
XST

Я думаю, що, якщо ви будете копати глибше, це, ймовірно, буде пов'язано з розміром даних. У певний момент сценарій, ймовірно, переповнюється внутрішнім (системним?) Змінним розміром і змивом на диск. У цей момент у вас є "нові" записи в папці, які сценарій належним чином обробляє.
Julian Knight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.