Parece que a renomeação se parece com um novo arquivo para o loop e, portanto, está sendo processada novamente.
Tente colocar em um teste adicional para onde pará-lo olhando para qualquer arquivo que comece com "Pasta 1".
Eu tenho pastas com imagens (* .png e * .jpg)
>C:\Directory\Folder1
01.png
02.png
03.jpg
04.jpg
05.png
E eu quero renomear todos os arquivos assim usando o powershell:
>C:\Directory\Folder1
Folder1 - 01.png
Folder1 - 02.png
Folder1 - 03.jpg
Folder1 - 04.jpg
Folder1 - 05.png
Então eu criei esta linha simples:
Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png"} | rename-item -newname {$_.Directory.Name +" - " + $_.Name}
Se eu tiver 35 ou menos arquivos na pasta, terei o resultado desejado, mas se houver arquivos 36 ou mais , terminarei com isso:
>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
O loop pára quando o nome do arquivo excede 248 caracteres.
Alguma idéia do motivo do loop?
EDITAR: Como proposto, uma solução simples é verificar se o nome da pasta já está adicionado ao nome do arquivo:
Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png" -and !$_.Name.StartsWith($_.Directory.Name) } | rename-item -newname {$_.Directory.Name +" - " + $_.Name}
Mas isso não me diz por que ele está em loop quando há mais de 36 arquivos na pasta.
Tags windows powershell