首页 文章

重命名目录中的所有项目

提问于
浏览
0

我有一个目录,其中包含大约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

    在第二次尝试中,您使用大括号来创建一个不需要的脚本块 . 以下对我有用

    Get-ChildItem | % {Rename-Item -NewName ('CD1'+ $_.Name) -Path $_.Name}
    

    请注意额外的-Path以重复文件的当前路径 .

  • 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}
    

相关问题