如何在Powershell中更改扩展文件?

时间:2019-07-20 03:15:04

标签: powershell

我想更改某些文件的扩展名。 我尝试了这段代码,但仍然返回错误

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') }

3 个答案:

答案 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上的-FilterGet-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,它将起作用。