PowerShell:如何为目录中的所有文件附加前缀?

Gif*_*guy 8 powershell rename bulk wildcards batch-rename

目前我正在使用 cmdlet,例如:

dir | rename-item -NewName {$_.name -replace "-","_"}
Run Code Online (Sandbox Code Playgroud)

但是现在我需要为目录中所有文件的文件名添加前缀。
我无法预测每个文件名的长度(它会有所不同),所以我不能只使用一堆.通配符。

我需要它在每个文件名的开头附加一个固定短语,无论该文件名是什么。

Set*_*eth 16

正则表达式的另一种方法是使用简单的字符串操作来创建新文件名。

$items=Get-ChildItem;
$items | Rename-Item -NewName { "Prefix_" + $_.Name };
Run Code Online (Sandbox Code Playgroud)

  • 我正在尝试这个,但它似乎发疯并不断尝试为文件名添加前缀,直到它因文件名太长而崩溃 - 例如,运行上面的命令会导致文件名像`Prefix_Prefix_Prefix_Prefix_Prefix_Prefix_Prefix_Prefix_Prefix_Prefix_...` (7认同)
  • 最后基于[this](/sf/answers/26071/​​79979/1557472),我只是在`Get-ChildItem`命令中添加了```-Exclude Prefix_*```。 (2认同)

Lot*_*ngs 9

你很近。

  • -replace 使用 RegEX 并且在正则表达式中,您在开头锚定 ^
  • 对于后缀,您可以类似地将行尾的锚替换为 $
  • 为避免重命名文件的任何可能的重复迭代,将管道的第一个元素括在括号中。

(Get-ChildItem -File) | Rename-Item -NewName {$_.Name -replace "^","Prefix_"}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案,因为它不会导致无限循环,而且我不需要将前缀写入两次 - 就像其他解决方案中使用“-Exclude Prefix_*”以避免循环时发生的情况一样。 (2认同)