powershell - 重命名项目 : Cannot rename because item at . .. 不存在

标签 powershell file-rename rename-item-cmdlet

<分区>

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

最佳答案

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

问题是 Windows PowerShell 根据文件 name< 将 Get-ChildItem (dir) 输出对象字符串化/em> 而不是完整路径,需要使用 $_.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] 的使用变量,它允许从延迟绑定(bind)脚本 block 内部递增跨输入对象的序列号。这是必要的,因为延迟绑定(bind)脚本 block 在调用者作用域的作用域中运行——与传递给 ForEach-Object 的脚本 block 不同。 (%) 和 Where-Object ()。
参见 GitHub issue #7157讨论这种差异。

关于powershell - 重命名项目 : Cannot rename because item at . .. 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65512978/

相关文章:

powershell - 输出文本文件以识别PowerShell中的操作文件

azure - 无法识别“New-AzSqlServerFirewallRule” - Azure Dev Ops Pipeline 的 Azure PowerShell 问题

regex - 正则表达式错误地评估为真

linux - 如何使用正则表达式重命名 linux shell 中的文件?

java - 文件重命名失败

regex - 通过正则表达式重命名文件,大写问题

PowerShell 提示路径,但路径有效

Powershell:替换为西里尔字符串

xml - 使用 Powershell 解析 xml 时访问复杂属性,如 "system.serviceModel"

powershell - 重命名项目 : add unique numeric sequence to prevent duplicate file names