So umgehen Sie Anführungszeichen in Exec Command in MSBuild

131

Ich versuche, ein MSBuild-Skript zu erstellen, das ein Netzwerklaufwerk einem Laufwerksbuchstaben im Skript zuordnet, aber leider enthält der Pfad zum Zielordner einen eingebetteten Speicherplatz. Der eingebettete Bereich führt dazu, dass die Zuordnung fehlschlägt, und ich weiß nicht, ob es möglich ist, Anführungszeichen um den Pfad zu umgehen. Ich habe versucht, doppelte Anführungszeichen zu setzen, aber MSBuild mag es nicht (entweder das oder Windows XP mag es nicht). Weiß jemand, wie man dieses Biest codiert, damit die Karte funktioniert?

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

Der eingebettete Raum kommt natürlich in "Programmdateien" vor.

Cyberherbalist
quelle

Antworten:

192

Verwenden Sie &quot;diese Option, um die doppelten Anführungszeichen zu codieren, die netim CommandAttributwert angezeigt werden sollen:

<Exec Command="net use x: &quot;\\ofmapoly703\c$\program files\ar\iap&quot; /user:$(UserID) $(Password)" 
WorkingDirectory="c:\" 
ContinueOnError="false" 
/> 
vladr
quelle
7
Dies hilft nicht, wenn Sie haben, Command="quot;$(PathWithTrailingBackslash)&quot;"da es als "Path\With\Trailing\Backslash\"und die \"Befehlszeilen-Escape-Sequenz für rendert ", sodass alle folgenden Argumente durcheinander geraten.
jnm2
@ jnm2 Könntest du nicht einfach &quot;nach dem zweiten einen hinzufügen ? Command="quot;$(PathWithTrailingBackslash)&quot;&quot;"
TetraDev
@TetraDev Dann fehlt immer noch der Backslash und Sie haben ein nicht geschlossenes Zitat, dessen Wirkung ich nicht ganz sicher bin.
jnm2
84

Sie können einfache Anführungszeichen für Befehle verwenden, z

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

(Von MSBuild Exec Task ohne zu blockieren )

Michael Freidgeim
quelle
Für mich ist die Verwendung von einfachen Anführungszeichen anstelle von & quot; Es ist eine bessere Lösung. Weil die & quot;. Dies kann zu Problemen führen, wenn Sie versuchen, einen XmlPoke auszuführen, bei dem Zeichen auf witzige Weise in Leerzeichen umgewandelt werden: from & quot; zu & amp; quot;
JavierD