我有一个目录,其中包含大约50个文件,我想在所有文件名前添加“CD1”。阅读here和here后。我想出了以下命令(在Windows 10上使用PowerShell ISE):
Get-ChildItem | Rename-Item -NewName {'CD1' + $_.Name}
但是为每个文件名添加了几次“CD1”。我也得到了错误:
Rename-Item : Could not find a part of the path. At line:1 char:17 + Get-ChildItem | Rename-Item -NewName {'CD1' + $_.Name} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (C:\Users\TOOdhm...CD1CD1CD149.mp3:String) [Rename-Item], DirectoryNotFoundException + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
似乎它不知道何时停止遍历目录,所以我使用了ForEach-Object
cmdlet并尝试了这个:
Get-ChildItem | ForEach-Object { Rename-Item -NewName {('CD1' + $_.Name)} }
没有做任何事情并且给出了错误
Rename-Item:无法计算参数'NewName',因为它的参数被指定为脚本块并且没有输入。如果没有输入,则无法评估脚本块。
有没有人知道我为什么会遇到这个问题?我现在可以手动重命名文件,但这两个命令都应该有效。我甚至找到了一个网站,他们在这种格式中几乎完全使用了一个例子(我认为在他们的例子中他们可能会附加)这些命令,这让我觉得它们不适合我。
答案 0 :(得分:1)
避免再次处理已重命名的项目的一种方法是将Get-ChildItem括在括号中。
(Get-ChildItem) | Rename-Item -NewName {'CD1'+ $_.name}
要避免连续运行的其他前置,请排除以CD1
Get-ChildItem | Where {$_.Name -notmatch '^CD1'} | Rename-Item -NewName {'CD1'+ $_.name}
或者
gci -Exclude CD1* | Ren -NewName {'CD1'+ $_.name}
答案 1 :(得分:0)
在您的第二次尝试中,您使用大括号作为您不需要的脚本块。 以下为我工作
Get-ChildItem | % {Rename-Item -NewName ('CD1'+ $_.Name) -Path $_.Name}
注意额外的-Path重复文件的当前路径。