命令行、引号和新行上的 Powershell 内联命令

标签 powershell command-line-interface newline quoting

我有一个从命令行获取参数的 powershell 脚本。

传递的参数是一个带有换行符的字符串,但我无法让它按我希望的那样工作。

命令行运行示例:

powershell.exe -command "& {& 'C:\My Scripts\Script.ps1' "Some Text`nWoo Hoo"}"

上面的脚本只传递了文本Some。如果我在传递的文本周围使用单引号,则 `n 换行符将按字面解释,而不是换行符。

我相信有办法解决这个问题!

谢谢

最佳答案

由于您的整个命令字符串(从 cmd.exe 调用时是必要的)双引号,您必须转义嵌入双引号引号为 \"(即使 PowerShell 中,` 用作转义字符,如嵌入式 `n 中所用 转义序列):

# From cmd.exe
powershell.exe -command "& 'C:\My Scripts\Script.ps1' \"Some Text`nWoo Hoo\""

另请注意,调用 PowerShell CLI 时无需使用 -Command "& { ... }" - 只需 -Command "..."就足够了。

在您的情况下,嵌入-引号 (\"...\"),即使用(转义)expandable string必须将 `n 转义序列插值到实际的换行符。
verbatim(文字)字符串就足够的情况下,您可以使用引号('...').

参见 this answer 的底部部分有关 PowerShell 中字符串文字的更多信息。

关于命令行、引号和新行上的 Powershell 内联命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64815643/

相关文章:

c - 为什么 strtok(line, "\n") **不** 用于去除 fgets() 留下的换行符

javascript - 匹配换行符之前的任意字符组

arrays - Powershell在每行字符的最后一个实例上拆分

php - 需要正则表达式来匹配多行,直到在公共(public)分隔符之间找到匹配

amazon-s3 - 如何与或 aws s3 复制语句与包含

c# - 使用 Json.Net 处理数据中的换行符

azure - AZCOPY_LOG_LOCATION - 在 Powershell ISE 中不起作用?

powershell - 在 PowerShell 中检查路径是否存在的更好方法

php - 从 cron 运行 php 脚本而不是选择 $_SERVER ['host' ] 从 CLI 运行的 wheras 工作

http - 使用来自文件的发布数据向 cURL 发送请求