【发布时间】:2022-01-19 02:24:25
【问题描述】:
如何正确转义 powershell v2 中的引号(从批处理文件中调用)?
我试过了:
powershell -Command "(gc file1.txt) -join "`n" | Out-File file2.txt"
和
powershell -Command "(gc file1.txt) -join ""`n"" | Out-File file2.txt"
和
powershell -Command "(gc file1.txt) -join '"`n`" | Out-File file2.txt"
但他们都失败了。
编者注:该命令的目的是将 Windows CRLF 换行符转换为 Unix LF-only 换行符,以便创建将在 Linux 上处理的文件。支持>
【问题讨论】:
-
不要停留在两个引号,使用三个
"""`n""",你就会成功! -
更重要的是,PowerShell 中的 backtick-n 被记录为在 Windows 中扩展为 CR/LF,这有点适合练习。如果查询者真的希望用only LF 分隔行,他应该使用
[char]10作为连接字符。 (以及如何在 cmets 中将 backtick-n 转换为“输入”文本?) -
@JeffZeitlin 呃哦……我发现的所有例子都声称
`n只是一个 LF。 -
@RockPaperLizard - 虽然
Get-Help about_Special_Characters确实调用`n“换行”,但它说它插入了一个“换行符”,如果你对结果运行十六进制转储,你会见0D 0A。 -
"`n"总是只是 LF(带有 Unicode 代码点10(0xA) 的 单个 字符),如以下返回$True的语句所示:"`n".length -eq 1和[char] 10 -eq [char] "`n"。不幸的是,Get-Help about_Special_Characters并没有明确说明这一点:它提到了“换行符”和“换行符”,而没有提到代表什么特定字符 [序列]。 (在 PowerShell 中,LF 本身与 CRLF 一样是有效的换行符)。
标签: powershell batch-file windows-7 escaping powershell-2.0