我试图使用下面的powershell脚本重命名一些文件
powershell.exe "& { Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '.txt','.csv' } }"
但$_.name
似乎在执行"& command"
时被解析,因此它抱怨它不知道.name
($_
已被删除)。在没有外部字符串的情况下执行它可以解决问题,但由于其他原因在我的情况下是不可行的。
如何逃避$_.name
?
答案 0 :(得分:2)
这完全没问题:
powershell.exe "& { Get-ChildItem *.txt | Rename-Item -NewName { `$_.name -Replace '.txt','.csv' } }"
答案 1 :(得分:0)
我无法看到原始命令有任何问题,但我个人会使用Path.ChangeExtension
方法代替-replace
:
powershell.exe -command "& {Get-ChildItem *.txt | Rename-Item -NewName { [io.path]::ChangeExtension($_.name, 'csv') }}"
或者您似乎从命令行调用PowerShell,您可以使用'重命名'而不是命令(而不是使用PowerShell):
ren *.txt *.csv
答案 2 :(得分:-1)
powershell.exe "& {
Get-ChildItem -Filter *.txt | ForEach-Object {`$_.Name}
}"
反引号转义PowerShell字符串中的特殊字符
`