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

Rename-item: Cannot rename because item at ... does not exist

我迷失了简单的重命名项目。需要将文件夹名称更改为“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

您的脚本运行良好。 (至少是第一个变体。)你不能 运行 它一次,因为你重命名了它正在使用的文件(即“数据测试”)。我刚刚在我的 E: 驱动器和 运行 你的脚本上创建了一个数据测试文件,一次没有问题。然后,在第二次尝试时,它无法工作,因为它是第一次工作。

如果您正在使用名为“Data-Test”的目录的内容,则需要在 $_ 后附加 .FullName。 (例如:重命名项目 $_.FullName -NewName ...)

见图:

如果它仍然不起作用,请确保您的 E: 驱动器的 CWD 中有一个名为“Data-Test”的 file/folder。在该位置放置一个反斜杠将 gua运行tee 您正在根目录中工作。 (例如:E:\Data-Test)

给出了要害指针:

问题是 Windows PowerShell 根据文件name 而不是 full path,需要使用 $_.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 common parameter预览操作。一旦您确定该操作将执行您想要的操作,请删除 -WhatIf

注意 [ref] variable, which enables incrementing the sequence number across input objects from inside the delay-bind script block. This is necessary, because delay-bind script blocks run in a child scope of the caller's scope - unlike the script blocks passed to ForEach-Object (%) and Where-Object (?) 的使用。
有关此差异的讨论,请参阅 GitHub issue #7157