我将尝试从Windows cmd.exe运行PowerShell脚本。输入到PowerShell脚本的是一个字符串,其中包含使用PowerShell反引号转义的换行符 - 例如:
`r`n
为了演示,输入字符串被写入控制台,并且被倾销到文件中。 我的问题是,当脚本使用命令cmd.exe的语法运行时,出现以下问题:
powershell.exe script.ps1 "TEST`r`nTEST"
字符串中的换行字符不会被视为换行符,而是在控制台输出和输出文本文件中字面包含。
TEST`r`nTEST
然而,如果我在PowerShell环境下运行此代码,则会得到预期的结果(即换行符被正确解析,并在适当位置插入换行符)。
TEST
TEST
同样地,如果我通过Windows cmd.exe传入
\r\n
而不是转义后的换行符,并在PowerShell脚本中执行.replace
操作。$date = $data.replace("\r\n","`r`n")
我得到了预期的输出结果:
TEST
TEST
有人能够解释为什么会出现这种情况吗?
以下是测试脚本:
param([string]$data) # data to send
Write-Host $data
[IO.File]::WriteAllText('d:\temp.txt', $data)
return 0
文件可以通过命令行调用:
powershell.exe script.ps1 "TEST`r`nTEST"
脚本运行在Windows Server 2012 R2上,使用PowerShell v4.0。
exit 0
而不是return 0
- 后者将会输出一个字面上的0
而不是设置退出码。 - mklement0powershell.exe -NoProfile Write-Output "TEST\
r`nTEST"`,我确实会得到_2_行。 - mklement0powershell.exe script.ps1 "TEST'r'nTEST"
可以正常打印,但powershell.exe script.ps1 "TEST 'r'nTEST"
只会打印第一个TEST
。在我的真实示例中,我没有使用-File
,但我确实有空格。当您使用-Write-Output
而不是脚本时,它会打印额外的换行符。 - Sahil Jain