重命名目录中的所有项目

时间:2017-08-22 22:59:52

标签: windows powershell

我有一个目录,其中包含大约50个文件,我想在所有文件名前添加“CD1”。阅读herehere后。我想出了以下命令(在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',因为它的参数被指定为脚本块并且没有输入。如果没有输入,则无法评估脚本块。

有没有人知道我为什么会遇到这个问题?我现在可以手动重命名文件,但这两个命令都应该有效。我甚至找到了一个网站,他们在这种格式中几乎完全使用了一个例子(我认为在他们的例子中他们可能会附加)这些命令,这让我觉得它们不适合我。

2 个答案:

答案 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重复文件的当前路径。

相关问题