![PowerShell - Rename-Item:无法将“System.Object[]”转换为参数“NewName”所需的类型“System.String”](https://linux22.com/image/1556552/PowerShell%20-%20Rename-Item%EF%BC%9A%E6%97%A0%E6%B3%95%E5%B0%86%E2%80%9CSystem.Object%5B%5D%E2%80%9D%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%8F%82%E6%95%B0%E2%80%9CNewName%E2%80%9D%E6%89%80%E9%9C%80%E7%9A%84%E7%B1%BB%E5%9E%8B%E2%80%9CSystem.String%E2%80%9D.png)
我正在尝试使用 PowerShell 批量重命名一堆文件,但是,我遇到了一个错误,我不知道该怎么办,而且搜索它也没有给我任何解决方案。
错误信息:
Rename-Item : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'NewName'.
例如2068227794 (0x8f860be3).bnk
:0x8f860be3_0001.bnk
在这个特殊情况下$hex_name
是0x8f860be3
。
$source = "K:\_test"
Get-ChildItem -Path $source -File -Recurse -Include "* (0x*).*" | ForEach-Object {
$prefix, $hex_name = ($_.BaseName).Split('()')
Rename-Item -Path $_ -NewName ($hex_name + "_0001" + $_.Extension)
}
答案1
由于该问题已在评论中得到回答,因此我将回答我自己的问题,以便将其标记为已解决。
错误发生时,$hex_name
数组包含十六进制字符串和其余部分。有 2 个简单的解决方案:
直接选择项目:
$hex_name = ($_.BaseName).Split('()')[1]
将不需要的其余部分分配给新变量:
$prefix, $hex_name, $rest = ($_.BaseName).Split('()')
所有功劳归于EBGreen。