微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决重命名项:无法重命名,因为 ... 处的项不存在

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

解决方法

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

如果您正在处理名为“Data-Test”的目录的内容,则需要在 $_ 后附加 .FullName。 (EX: Rename-Item $_.FullName -NewName ...)

见图片:
See image

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

,

user14915444's helpful answer 提供了关键指针:

问题在于 Windows PowerShell 会根据情况将 Get-ChildItem (dir) 输出对象按文件 名称 而不是 字符串化>完整路径,需要使用$_.FullName而不仅仅是$_问题已在 PowerShell [Core] v6.1+ 中得到修复 - 请参阅 this answer 了解详情。

但是,在您的情况下,可以通过将 Get-ChildItem 输出直接管道传输到 Rename-Item,使用 delay-bind script block 来完全避免该问题,这也可以加快操作:

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

注意:上面命令中的-WhatIf common parameter预览操作。一旦您确定操作会满足您的要求,请移除 -WhatIf

请注意 [ref] 变量的使用,它允许从延迟绑定脚本块内部跨输入对象递增序列号。这是必要的,因为延迟绑定脚本块在调用者作用域的 child 作用域中运行 - 与传递给 ForEach-Object (%) 和 {{3} 的脚本块不同} (?).
有关此差异的讨论,请参阅 Where-Object

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?