我想更改某些文件的扩展名。 我尝试了这段代码,但仍然返回错误
The input to the script block for parameter 'NewName' failed.
有人可以帮忙吗?
$b = "TA"
$c = "70"
$Path_1 = "C:\Users\hh\Documents"
$Found = Get-ChildItem -Name "$Path_1\*$b-$c*.txt" | Rename-Item -NewName { $_.Name.Replace('.txt','.csv') }
答案 0 :(得分:1)
这应该做到:
$b = "TA"
$c = "70"
$Path_1 = "C:\Users\hh\Documents"
$Found = Get-ChildItem -Filter ($Path_1 + "\*" + $b + "-" + $c + "*.txt")
foreach ($entry in $Found){
Rename-Item -Path $entry.FullName -NewName ($entry.Name.Replace('.txt','.csv'))
}
答案 1 :(得分:1)
在这种情况下,使用-Path
cmdlet上的-Filter
和Get-ChildItem
参数要容易得多。
如果要确保不要偶然更改文件夹名称,请在PowerShell 3.0及更高版本中,像我在此处一样,同时添加-File
开关:
$b = "TA"
$c = "70"
$Path_1 = "C:\Users\hh\Documents"
Get-ChildItem -Path $Path_1 -Filter "*$b-$c*.txt" | Rename-Item -NewName { '{0}.csv' -f $_.BaseName } -WhatIf
# For PowerShell versions below 3.0, you need to add an extra Where-Object clause:
# Get-ChildItem -Path $Path_1 -Filter "*$b-$c*.txt" | Where-Object { !$_.PSIsContainer } | Rename-Item -NewName { '{0}.csv' -f $_.BaseName } -WhatIf
当然,您也可以使用.NET [System.IO.Path]
Get-ChildItem -Path $Path_1 -Filter "*$b-$c*.txt" | Rename-Item -NewName { [System.IO.Path]::ChangeExtension($_.Name, ".csv") } -WhatIf
如果对结果满意,请删除-WhatIf
开关。
答案 2 :(得分:0)
该错误消息的其余部分是“您不能在空值表达式上调用方法”。 “ get-childitem -name”仅输出字符串,而不输出具有属性的对象。在get-childitem之后取出-name,它将起作用。