gpt4 book ai didi

powershell - 重命名项目 : Source and destination path must be different error in Powershell

转载 作者:行者123 更新时间:2023-12-05 02:01:44 25 4
gpt4 key购买 nike

我正在使用 Powershell 并尝试返回一个目录的子项,该目录恰好是一个子目录,然后使用 Rename-Item cmdlet 将子目录名称重命名为其他名称。

我觉得下面的代码应该可以工作:

Get-ChildItem "C:\Users\Admin\Desktop\mydirectory\subdirectory" | Rename-Item -NewName {$_.Name -replace 'test'} 

但是我收到了这个错误:

重命名项目:源路径和目标路径必须不同。

我在这里错过了什么?提前致谢!

最佳答案

由于您使用的是 Get-ChildItem在不将结果限制为文件(通过-File 开关)的情况下,文件和目录 都可以在输出项中。

同时 Rename-Item如果一个文件被重命名为它当前拥有的同名,在上尝试相同的名称,将导致安静的无操作>directory 导致您看到的错误。

这适用于名称​​不包含子字符串'test' 的所有项,在这种情况下
-replace操作按原样传递输入字符串。

如果您的目的是重命名仅文件,解决方案是简单地添加-File 开关 :

Get-ChildItem -File "C:\Users\Admin\Desktop\mydirectory\subdirectory" |
Rename-Item -NewName { $_.Name -replace 'test' }

如果目录(也)有针对性,就像您的情况一样,您需要明确过滤掉不会发生实际重命名的输入项强>:

Get-ChildItem -Directory -Filter *test* "C:\Users\Admin\Desktop\mydirectory\subdirectory" |
Rename-Item -NewName { $_.Name -replace 'test' }

-Filter *test* 确保仅输出包含单词 'test' 的子目录,这保证实际重命名发生(但请注意该命令会失败如果子目录的整个名称是'test',因为这会使脚本 block 返回空字符串)。


如果您只是想单个子目录重命名为固定的新名称,则不需要延迟绑定(bind)脚本 block 完全:

# NOTE: Works only if only a SINGLE subdirectory is returned.
Get-ChildItem -Directory "C:\Users\Admin\Desktop\mydirectory\subdirectory" |
Rename-Item -NewName 'test'

如果您有多个 子目录并且您希望将序列号 合并到新名称中,您再次需要一个延迟绑定(bind)脚本 block :

$num = 0
Get-ChildItem -Directory "C:\Users\Admin\Desktop\mydirectory\subdirectory" |
Rename-Item -NewName { 'test' + ++(Get-Variable -Scope 1 num).Value } -WhatIf

这会将子目录重命名为 test1test2、...
有关此技术的解释(需要 Get-Variable 调用),请参阅 this answer .


如果您想预览将要进行的重命名操作,您可以添加 -WhatIf common parameter Rename-Item 调用,它将为每个输入文件显示它重命名为什么。

但是,由于 delay-bind script block,您必须从输出中推断 没有实际重命名的情况传递给 -NewName 返回与之前相同的名称

例如,名为 foo 的输入文件将不会重命名,因为 'foo' -replace 'test' 返回 ' foo' 未经修改,使用 -WhatIf 将显示如下(添加换行符以提高可读性)- 注意目标路径和目标路径是如何相同的:

What if: Performing the operation "Rename File" on target "
Item: C:\path\to\foo
Destination: C:\path\to\foo
"

关于powershell - 重命名项目 : Source and destination path must be different error in Powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66359843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com