如何从PowerShell命令行转义管道字符以传递到非PowerShell命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从PowerShell命令行转义管道字符以传递到非PowerShell命令相关的知识,希望对你有一定的参考价值。
我在PowerShell控制台会话中,尝试从PowerShell命令行运行cwd
中存在的Gradle脚本。
Gradle命令接受一个参数,其中包含可以包含一个或多个管道字符的引号,我不能在我的生活中弄清楚如何让PowerShell只使用一行(或任意数量的行,实际上 - 但我对多线解决方案不感兴趣。
这是命令:
./gradlew theTask -PmyProperty="thisThing|thatThing|theOtherThing"
...产生此错误:
'thatThing' is not recognized as an internal or external command, operable program or batch file.
我已经尝试了所有这些变体,但没有一个变得有效。任何的想法?
./gradlew theTask -PmyProperty="thisThing`|thatThing`|theOtherThing"
./gradlew theTask -PmyProperty=@"thisThing|thatThing|theOtherThing"
./gradlew theTask -PmyProperty="thisThing\|thatThing\|theOtherThing"
./gradlew theTask -PmyProperty="thisThing\\|thatThing\\|theOtherThing"
./gradlew theTask -PmyProperty="thisThing^|thatThing^|theOtherThing"
答案
好吧,我发现:
首先像我最初建议的那样调用你的脚本:
./gradlew theTask -PmyProperty="thisThing^|thatThing^|theOtherThing"
然后通过添加引号修改gradlew.bat脚本:
set CMD_LINE_ARGS="%*"
问题是:现在必须在引号内调用CMD_LINE_ARGS,否则将发生相同的错误。
所以我假设你的命令行参数不能是别的,我正在逐个处理每个参数
rem now remove the quotes or there will be too much quotes
set ARG1="%1"
rem protect or the pipe situation will occur
set ARG1=%ARG1:""=%
set ARG2="%2"
set ARG2=%ARG2:""=%
set ARG3="%3"
set ARG3=%ARG3:""=%
echo %ARG1% %ARG2% %ARG3%
输出是(对于我的模型命令):
theTask -PmyProperty "thisThing|thatThing|theOtherThing"
“=”已经消失,因为它已将参数与PowerShell分开。我想如果你的命令有标准的参数解析,这不会是一个问题。
添加任意数量的参数,但无论如何都要限制为9。
以上是关于如何从PowerShell命令行转义管道字符以传递到非PowerShell命令的主要内容,如果未能解决你的问题,请参考以下文章