重命名项目:无法重命名,因为...处的项目不存在。

4

我在使用rename-item时遇到了问题。需要将文件夹的名称更改为“01”,“02”,“03”……已经尝试了所有方法,但最终出现了“项目不存在”的错误提示。非常抱歉这个问题比较简单,但我已经寻找解决方案一整天了。

PS C:\Users\admin> 
$nr = 1

Dir E:"Data-test" | %{Rename-Item $_ -NewName (‘{0}’ -f $nr++)}

Rename-Item : Cannot rename because item at 'ert' does not exist.
At line:3 char:23
+ Dir E:"Data-test" | %{Rename-Item $_ -NewName (‘{0}’ -f $nr++)}
+                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
 
Rename-Item : Cannot rename because item at 'ukh' does not exist.
At line:3 char:23
+ Dir E:"Data-test" | %{Rename-Item $_ -NewName (‘{0}’ -f $nr++)}
+                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
 
Rename-Item : Cannot rename because item at 'yph' does not exist.
At line:3 char:23
+ Dir E:"Data-test" | %{Rename-Item $_ -NewName (‘{0}’ -f $nr++)}
+                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
2个回答

3

user14915444的有用回答 提供了一个重要的提示:

问题在于Windows PowerShell有时会按文件名而不是全路径来转换Get-ChildItem(dir)输出对象,这需要使用$_.FullName而不仅仅是$_问题已经在PowerShell [Core] v6.1+中得到解决 - 详见此回答

但是,在你的情况下,可以通过将Get-ChildItem输出直接导入Rename-Item,使用延迟绑定脚本块来避免整个问题,并加快操作速度:

[ref] $nr = 1
Get-ChildItem E:Data-test | Rename-Item -NewName { '{0}' -f $nr.Value++ } -WhatIf

注意: 上述命令中的 -WhatIf 常见参数 是用于预览操作的。当您确信操作可以满足您的需求时,请移除 -WhatIf

请注意使用了 [ref] 变量,使得延迟绑定脚本块内部可以增加输入对象的序列号。这是必要的,因为延迟绑定脚本块运行在调用者作用域的子作用域中,与传递给 ForEach-Object (%) 以及 Where-Object (?) 的脚本块不同。
请参阅GitHub issue #7157 来讨论此差异。


2
您的脚本很好。 (至少第一种变化。)由于您重命名了它正在使用的文件(即“Data-Test”),因此您只能运行它一次。我在我的E:驱动器上创建了一个Data-Test文件,并成功运行了您的脚本一次。然后,在第二次尝试时,它无法工作,因为它在第一次运行时已经起作用。
如果您正在处理名为“Data-Test”的目录的内容,则需要将$_与.FullName附加在一起。 (例如:Rename-Item $_.FullName -NewName ...)
请参见图像:
See image 如果仍然无法工作,请确保您的E:驱动器的CWD中有一个名为“Data-Test”的文件/文件夹。在位置中放置反斜杠将确保您在根目录中工作。 (例如:E:\ Data-Test)

2
@user14915444 表示签名是不必要的,因为它只是噪音,而且网络/个人博客被认为是垃圾邮件(您可以将其放在您的个人资料中,但不能放在答案中)。 - eyllanesc
1
+1 对 $_.FullName 的提示,但请注意问题中的命令(只有一个)并不完美工作,因为它确实会触发文件名的字符串化。情境名称字符串化问题困扰着Windows PowerShell,但已在PowerShell [Core] v6.1+中得到解决 - 有关详细信息,请参见此答案。 - mklement0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接