How do I pass an equal sign when calling a batch script in Powershell?

batch-file, powershell

Solution

I've seen this before and have found a way to trick it out. I wish I could explain what's going on in particular with the '=' but I cannot. In your situation I'm fairly certain the following will work if you want to pass properties to msbuild:

build App Target '"/p:Property=Value"' 

When echoed, this produces the following:

msbuild.exe App.msbuild /t:Target "/p:Property=Value"

Problem

We have a batch file that invokes our MSBuild-based build process. Syntax: ``` build App Target [ Additional MSBuild Arguments ] ``` Internally, it does this: ``` msbuild.exe %1.msbuild /t:%2 %3 %4 %5 %6 %7 %8 %9 ``` Which results in calls to MSBuild that look like this: ``` msbuild.exe App.msbuild /t:Target ``` When any argument contains the equal sign, `=`, Powershell completely removes it. My batch script never sees it. This does not happen with the standard `cmd.exe` command prompt. For example, if I call ``` build App Target "/p:Property=Value" ``` this is what gets passed to MSBuild: ``` msbuild.exe App.msmbuild /t:Target /p:Property Value ``` I expected this: ``` msbuild.exe App.msbuild /t:Target "/p:Property=Value" ``` I've tried the Powershell escape character, the standard Command Prompt escape character, and even stuff I made up: ``` 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 ``` None of it works. What do I do to get the equal sign to not be stripped out or removed?

Original source