Powershell 重命名项:无法重命名,因为项位于。。。不存在
我对简单的重命名项感到迷茫。需要将文件夹名称更改为“01”、“02”、“03”。。。尝试了一切,但最后我得到了这个“项目不存在”。很抱歉问了这个愚蠢的问题,但我整天都在寻找解决办法Powershell 重命名项:无法重命名,因为项位于。。。不存在,powershell,file-rename,rename-item-cmdlet,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' do
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:drive上创建了一个数据测试文件,并一次性运行了您的脚本。然后,在第二次尝试时,它无法工作,因为它第一次工作
如果您正在处理名为“Data Test”的目录的内容,则需要将$\uUwith.FullName附加在后面。(例如:重命名项$\ FullName-NewName…)
请参见图片:如果仍然无法工作,请确保您的E:驱动器的CWD中有一个名为“Data Test”的文件/文件夹。在该位置放置反斜杠将保证您在根目录下工作。(例如:E:\数据测试)提供了关键指针: 问题在于Windows PowerShell会根据文件名而不是完整路径对
Get ChildItem
(dir
)输出对象进行字符串化,因此需要使用$\FullName
而不仅仅是$\code>;已在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
请注意使用了一个变量,该变量允许从延迟绑定脚本块内部跨输入对象递增序列号。这是必要的,因为延迟绑定脚本块在调用方作用域的子作用域中运行-与传递给(%
)和(?
)的脚本块不同。
有关此差异的讨论,请参阅。@user14915444表示签名是不必要的,因为它只是噪音,并且web/个人博客被视为垃圾邮件(您可以将其放在个人资料中,但不能放在答案中)+1表示$\FullName
提示,但请注意问题中的命令(只有一个)这不会很好地工作,因为它确实会触发仅文件名的字符串化。仅使用情景名称的严格化问题困扰着Windows PowerShell,但已在PowerShell[Core]v6.1+中修复-有关详细信息,请参阅。