Prefixo arquivos com o nome do diretório atual usando o Powershell

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.

    
por XST 28.06.2013 / 05:11

1 resposta

0

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".

    
por 28.06.2013 / 10:58