Jak zmienić znak cudzysłowu w poleceniu Exec w programie MSBuild

131

Próbuję zbudować skrypt MSBuild, który mapuje dysk sieciowy na literę dysku w skrypcie, ale niestety ścieżka do folderu docelowego zawiera osadzoną przestrzeń. Osadzona przestrzeń powoduje niepowodzenie mapowania i nie wiem, czy można uniknąć cudzysłowów na ścieżce. Próbowałem używać podwójnych cudzysłowów, ale MSBuild tego nie lubi (albo to, albo Windows XP tego nie lubi). Czy ktoś wie, jak zakodować tę bestię, aby mapa działała?

<Exec Command="net use x: \\ofmapoly703\c$\program files\ar\iap /user:$(UserID) $(Password)"
WorkingDirectory="c:\"
ContinueOnError="false"
/>

Osadzona przestrzeń występuje oczywiście w „plikach programu”.

Cyberherbalista
źródło

Odpowiedzi:

194

Służy &quot;do kodowania podwójnych cudzysłowów, które chcesz netwidzieć wewnątrz Commandwartości atrybutu:

<Exec Command="net use x: &quot;\\ofmapoly703\c$\program files\ar\iap&quot; /user:$(UserID) $(Password)" 
WorkingDirectory="c:\" 
ContinueOnError="false" 
/> 
vladr
źródło
7
To nie pomaga, gdy masz, Command="quot;$(PathWithTrailingBackslash)&quot;"ponieważ renderuje się jako "Path\With\Trailing\Backslash\"i \"jest sekwencją ucieczki wiersza poleceń dla ", więc wszystkie następujące argumenty są pomieszane.
jnm2
@ jnm2 Nie mógłbyś po prostu dodać kolejnego &quot;po drugim? Command="quot;$(PathWithTrailingBackslash)&quot;&quot;"
TetraDev
@TetraDev W takim razie nadal brakuje odwrotnego ukośnika i masz niezamknięty cytat, którego efektu nie jestem do końca pewien.
jnm2
85

Możesz użyć pojedynczych cudzysłowów dla polecenia, np

  <Exec Command='explorer.exe "$(DestinationDir)"' IgnoreExitCode="true" />

(Z zadania MSBuild exec bez blokowania )

Michael Freidgeim
źródło
U mnie używaj pojedynczych cudzysłowów zamiast & bdquo; to lepsze rozwiązanie. Ponieważ & bdquo ;. Może to prowadzić do problemów, gdy spróbujesz zrobić XmlPoke, przechodząc do znaków kosmicznych w zabawny sposób: od & bdquo; na & amp; quot;
JavierD