在Powershell中调用批处理脚本时如何传递等号?

Aar*_*sen 16 powershell batch-file

我们有一个批处理文件来调用我们基于MSBuild的构建过程.句法:

build App Target [ Additional MSBuild Arguments ]
Run Code Online (Sandbox Code Playgroud)

在内部,它这样做:

msbuild.exe %1.msbuild /t:%2 %3 %4 %5 %6 %7 %8 %9
Run Code Online (Sandbox Code Playgroud)

这导致对MSBuild的调用如下所示:

msbuild.exe App.msbuild /t:Target

当任何参数包含等号时=,Powershell会完全删除它. 我的批处理脚本永远不会看到它 标准cmd.exe命令提示符不会发生这种情况.

例如,如果我打电话

build App Target "/p:Property=Value"
Run Code Online (Sandbox Code Playgroud)

这是传递给MSBuild的内容:

msbuild.exe App.msmbuild /t:Target /p:Property Value
Run Code Online (Sandbox Code Playgroud)

我期待这个:

msbuild.exe App.msbuild /t:Target "/p:Property=Value"
Run Code Online (Sandbox Code Playgroud)

我尝试过Powershell转义字符,标准的命令提示符转义字符,甚至是我编写的东西:

build App Target "/p:Property=Value"
build App Target '/p:Property=Value'
build App Target /p:Property^=Value
build App Target /p:Property`=Value
build App Target /p:Property==Value
Run Code Online (Sandbox Code Playgroud)

它都不起作用. 我怎么办才能让等号不被删除或删除?

Sco*_*aad 20

我以前见过这个,并找到了一种方法来欺骗它.我希望我能解释一下特别是'='的情况,但我不能.在您的情况下,我非常确定如果您想将属性传递给msbuild,以下内容将会起作用:

build App Target '"/p:Property=Value"' 
Run Code Online (Sandbox Code Playgroud)

回显时,会产生以下结果:

msbuild.exe App.msbuild /t:Target "/p:Property=Value"
Run Code Online (Sandbox Code Playgroud)


Lar*_*ens 5

使用PowerShell 3,您可以使用 --% 停止正常解析 powershell。

build --% App Target "/p:Property=Value"
Run Code Online (Sandbox Code Playgroud)