脚本参数中的 Powershell 换行符不起作用
Powershell newline in script argument not working
我有这个小脚本,我用不同的 RegEx 参数调用它来替换文件中的文本:
param ($file, $fnd, $rpl)
(Get-Content $file -Raw) -replace $fnd , $rpl | Set-Content $file
问题是如果我向它传递一个包含新行转义代码 `r`n 的参数,如下所示:
powershell -File txt-replace.ps1 "file path" "RegEx_pattern" "line1`r`nline2"
将写入文件:
line1`r`nline2
而不是:
line1
line2
但如果我在脚本中定义 $rpl,并使用确切的参数内容,它就会起作用:
$rpl = "line1`r`nline2"
写道:
line1
line2
如果我 运行 它也可以作为 widows 终端中的命令使用:
powershell -command "(Get-Content file_path | Out-String ).Trim() | ForEach-Object {$_ -replace 'RegEx_pattern' , \"line1`r`nline2\"} | Set-Content file_path "
我在脚本中进一步调试它:
write-host $rpl
在终端中写入:
line1`r`nline2
但是
$rpl= "line1`r`nline2"
write-host $rpl
在终端中写入:
line1
line2
我错过了什么?
直接用-Command
参数最简单
powershell -Command ".\txt-replace.ps1 \"file path\" \"RegEx_pattern\" \"line1`r`nline2\""
反斜杠转义符用于 CMD shell。由于您希望将这些引号传递给 PowerShell,因此我们需要先在 CMD shell 层对它们进行转义。否则,CMD 会认为它们是周围的字符串以供其解释。
当使用 -File
时,脚本参数在当前 shell 解释后按字面意思传递。 CMD 不知道换行符是什么,所以它们只是保留 `r`n,然后作为字符串参数之一按字面意思传递。
使用 -Command
时,命令字符串被视为是在 PowerShell 提示符下输入的。
有关详细信息,请参阅 About_PowerShell.exe。
我有这个小脚本,我用不同的 RegEx 参数调用它来替换文件中的文本:
param ($file, $fnd, $rpl)
(Get-Content $file -Raw) -replace $fnd , $rpl | Set-Content $file
问题是如果我向它传递一个包含新行转义代码 `r`n 的参数,如下所示:
powershell -File txt-replace.ps1 "file path" "RegEx_pattern" "line1`r`nline2"
将写入文件:
line1`r`nline2
而不是:
line1
line2
但如果我在脚本中定义 $rpl,并使用确切的参数内容,它就会起作用:
$rpl = "line1`r`nline2"
写道:
line1
line2
如果我 运行 它也可以作为 widows 终端中的命令使用:
powershell -command "(Get-Content file_path | Out-String ).Trim() | ForEach-Object {$_ -replace 'RegEx_pattern' , \"line1`r`nline2\"} | Set-Content file_path "
我在脚本中进一步调试它:
write-host $rpl
在终端中写入:
line1`r`nline2
但是
$rpl= "line1`r`nline2"
write-host $rpl
在终端中写入:
line1
line2
我错过了什么?
直接用-Command
参数最简单
powershell -Command ".\txt-replace.ps1 \"file path\" \"RegEx_pattern\" \"line1`r`nline2\""
反斜杠转义符用于 CMD shell。由于您希望将这些引号传递给 PowerShell,因此我们需要先在 CMD shell 层对它们进行转义。否则,CMD 会认为它们是周围的字符串以供其解释。
当使用 -File
时,脚本参数在当前 shell 解释后按字面意思传递。 CMD 不知道换行符是什么,所以它们只是保留 `r`n,然后作为字符串参数之一按字面意思传递。
使用 -Command
时,命令字符串被视为是在 PowerShell 提示符下输入的。
有关详细信息,请参阅 About_PowerShell.exe。