19

Currently I'm using cmdlets like:

dir | rename-item -NewName {$_.name -replace "-","_"}

But now I need to add a prefix to the filename for all files in the directory.
I can't predict how long each filename is (it varies), so I can't just use a bunch of . wildcards.

I need it to append a fixed phrase to the beginning of each filename, regardless what that filename is.

Giffyguy
  • 1,062

4 Answers4

34

An alternative approach to a regular expression would be to use simple string operations to create the new file name.

$items=Get-ChildItem;
$items | Rename-Item -NewName { "Prefix_" + $_.Name };
Blaze
  • 813
Seth
  • 9,393
16

You are quite near.

  • -replace uses RegEX and in a Regular Expression you anchor at the beginning with a ^
  • for a suffix you can similarly replace the anchor at line end with $
  • to avoid any possible re-iteration of the renamed file enclose the first element of the pipeline in parentheses.

(Get-ChildItem -File) | Rename-Item -NewName {$_.Name -replace "^","Prefix_"}
LotPings
  • 7,391
2

To remove prefix of all in folder:

Get-ChildItem 'Folderpath\KB*' | Rename-Item -NewName { $_.Name -replace 'KB*','' }

To Add a prefix to all in folder:

foreach($item in 'Folderpath')
{
Get-ChildItem 'C:\Users\ilike\OneDrive\Desktop\All in one script\Single Patch here' | Rename-Item -NewName { "KB" + $_.Name }
}

Took a while, hope this can help others in need

0

get-childitem *.FileExtension_ | foreach { rename-item $_ $.Name.Replace($.Name,"Prefix_" + $_.Name) }

Replace FileExtension_ with the extension corresponding to the filetype you want to add prefix to. Or just remove .FileExtension_ along with the "." to add prefix to all files in working directory. Replace Prefix_ with the desired prefix.