Powershell管道串

时间:2017-04-12 08:28:21

标签: powershell

我试图使用下面的powershell脚本重命名一些文件

 powershell.exe "& { Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '.txt','.csv' } }"

$_.name似乎在执行"& command"时被解析,因此它抱怨它不知道.name$_已被删除)。在没有外部字符串的情况下执行它可以解决问题,但由于其他原因在我的情况下是不可行的。

如何逃避$_.name

3 个答案:

答案 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字符串中的特殊字符

`