Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 重命名项:无法重命名,因为项位于。。。不存在_Powershell_File Rename_Rename Item Cmdlet - Fatal编程技术网

Powershell 重命名项:无法重命名,因为项位于。。。不存在

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

我对简单的重命名项感到迷茫。需要将文件夹名称更改为“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: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+中修复-有关详细信息,请参阅。