I have folders with images (*.png and *.jpg)
>C:\Directory\Folder1
01.png
02.png
03.jpg
04.jpg
05.png
And I want to rename all the files like this using powershell:
>C:\Directory\Folder1
Folder1 - 01.png
Folder1 - 02.png
Folder1 - 03.jpg
Folder1 - 04.jpg
Folder1 - 05.png
So I came up with this simple line:
Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png"} | rename-item -newname {$_.Directory.Name +" - " + $_.Name}
If I have 35 or less files in the folder, I will have the wanted result, but if there is 36 or more files, I will end up with this:
>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
The loop stops when the file's name exceeds 248 characters.
Any ideas why it's looping?
EDIT: As proposed, a simple solution is to check if the folder's name is already added to the file's name:
Get-ChildItem | Where-Object { $_.Extension -eq ".jpg" -or $_.Extension -eq ".png" -and !$_.Name.StartsWith($_.Directory.Name) } | rename-item -newname {$_.Directory.Name +" - " + $_.Name}
But it doesn't tell me why it's looping when there is over 36 files in the folder.