【发布时间】:2017-06-26 01:55:18
【问题描述】:
我正在尝试从 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而不是设置退出代码。 -
我很困惑你的字符串 isn't 被插值,因为你没有使用
-File并且默认值 - 直到 PSv5.1 - 是-Command。您是否真的在使用-File而只是忘记在问题中包含它?例如,如果我在 v4 中运行powershell.exe -NoProfile Write-Output "TEST`r`nTEST",我会得到 2 行。 -
@mklement0 有趣的是,
powershell.exe script.ps1 "TEST'r'nTEST"可以正确打印,但powershell.exe script.ps1 "TEST 'r'nTEST"只打印第一个TEST。在我的真实示例中,我没有使用-File,但我确实有空格。当您使用-Write-Output而不是脚本时,它会打印额外的换行符。
标签: powershell cmd powershell-4.0