u/Righteous_Dude

How to avoid operating on the same filename repeatedly?

Hello. I have never learned PowerShell properly, and I only search on the Web to try to find a command that can do some task when needed.

Sometimes that task has been something like "rename each file in a directory".

Today I asked Edge Copilot for a one-liner to prefix each filename. It suggested:

Get-ChildItem | Rename-Item -NewName { "PREFIX_$($_.Name)" }

So I did:

Get-ChildItem | Rename-Item -NewName { "9b_$($_.Name)" }

But that resulted in some files having very long filenames 9b_9b_9b_9b_..., and then it stopped with an error about filename length.

So then Edge Copilot suggested this method, which works fine:

Get-ChildItem -File | Where-Object Name -notlike 'PREFIX_*' | Rename-Item -NewName { "PREFIX_$($_.Name)" }


But my question for you today is: When I make a command with Get-ChildItem -File, how do I tell it to do an operation just once on each file in a directory, and not treat a renamed file like a new entry to again operate on?


Some weeks ago, I had a similar symptom where I was using a one-liner of the form:

Get-ChildItem -File | Rename-Item -NewName { $_.Name -replace 'oldString', 'newString' }

and for example, if my 'oldString' was '9' and 'newString' was 9b, it would do the replacement operation repeatedly, and the resulting filename became very long: 9bbbbbbbbbbbbb...

Likewise there, I just want it to do the rename once, and not see the renamed file as a new entry to operate on again and again.

I suppose there might be some option or different order of the command so that it has the behavior I desire, instead of inserting a clause to check whether the operation has already been done.

Thanks for any help.

reddit.com
u/Righteous_Dude — 10 hours ago