181 Stimmen

Wie entferne ich Ampersands in Batch-Dateien?

Wie entferne ich Ampersands in einer Stapeldatei (oder in der Windows-Befehlszeile), um die start Befehl an Webseiten mit Ampersands in der URL zu öffnen?

Doppelte Anführungszeichen funktionieren nicht mit start ; damit beginnt eine neue Kommandozeilenfenster.

Aktualisierung 1 : Die Lösung von Wael Dalloul funktioniert. Außerdem, wenn kodierte Zeichen in der URL enthalten sind (z. B. ein Leerzeichen wird als %20) in der URL und es befindet sich in einer Stapeldatei dann muss "%" sein als '%%' kodiert werden. Dies ist in diesem Beispiel nicht der Fall.

Beispiel, über die Befehlszeile ( CMD.EXE ):

start http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8

führt zu

http://www.google.com/search?client=opera 

die im Standardbrowser geöffnet werden, und diese Fehler im Befehlszeilenfenster:

'rls' is not recognized as an internal or external command,
operable program or batch file.
'q' is not recognized as an internal or external command,
operable program or batch file.
'sourceid' is not recognized as an internal or external command,
operable program or batch file.
'ie' is not recognized as an internal or external command,
operable program or batch file.
'oe' is not recognized as an internal or external command,
operable program or batch file.

Plattform: Windows XP 64 bit SP2.

168voto

Wael Dalloul Punkte 21012

& wird zur Trennung von Befehlen verwendet. Daher können Sie verwenden ^ zu entkommen. & .

130voto

Lasse Christiansen Punkte 9885

Von einem cmd :

  • & wird so entkommen: ^& (basierend auf @Wael Dallouls réponse )
  • % muss nicht entkommen werden

Ein Beispiel:

start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%20and%20percentage+in+cmd^&sourceid=opera^&ie=utf-8^&oe=utf-8

Aus einer Stapeldatei

  • & wird so entkommen: ^& (basierend auf @Wael Dallouls réponse )
  • % wird so entkommen: %% (basierend auf der Aktualisierung des OPs)

Ein Beispiel:

start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%%20and%%20percentage+in+batch+file^&sourceid=opera^&ie=utf-8^&oe=utf-8

35voto

belugabob Punkte 4300

Sie können es in Anführungszeichen einschließen, wenn Sie ein Dummy-Argument angeben.

Beachten Sie, dass Sie in diesem Fall ein erstes Dummy-Argument angeben müssen, da start behandelt das erste Argument als Titel für das neue Konsolenfenster, wenn es in Anführungszeichen steht. So sollte das Folgende funktionieren (und tut es hier):

start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"

21voto

KV Prajapati Punkte 91877
explorer "http://www.google.com/search?client=opera&rls=...."

18voto

Denis Howe Punkte 1710

Der Befehl

echo this ^& that

funktioniert wie erwartet und gibt aus

this & that

Der Befehl

echo this ^& that > tmp

funktioniert ebenfalls und schreibt die Zeichenfolge in die Datei "tmp". Bevor jedoch eine Pipe

echo this ^& that | clip

wird der ^ völlig anders interpretiert. Es versucht, die Ausgabe der beiden Befehle "echo this" und "that" in die Pipe zu schreiben. Das "echo" wird funktionieren, während "that" einen Fehler verursacht. Sprich

echo this ^& echo that | clip

legt die Zeichenketten "dies" und "das" in die Zwischenablage.

Ohne die ^:

echo this & echo that | clip

wird das erste Echo auf die Konsole geschrieben und nur die Ausgabe des zweiten Echos wird in die Zwischenablage geleitet (ähnlich wie bei der Umleitung "> tmp"). Wenn also die Ausgabe umgeleitet wird, zitiert das ^ das & nicht, sondern bewirkt, dass es vor der Umleitung und nicht danach angewendet wird.

Um ein & über die Pipeline zu leiten, müssen Sie es zweimal zitieren

echo this ^^^& that | clip

Wenn Sie die Zeichenkette in eine Variable einfügen

set m=this ^& that

entonces

set m

wird ausgegeben

m=this & that

aber das Offensichtliche

echo %m%

scheitert, weil Windows die Variable ersetzt, was zu

echo this & that

wird dies als neuer Befehl geparst und versucht, "das" auszuführen.

In einer Stapeldatei können Sie Folgendes verwenden verzögerte Expansion :

setlocal enableDelayedExpansion
echo !m!

Zur Ausgabe in eine Pipe müssen wir alle &s im Variablenwert durch ^& ersetzen, was wir mit der Syntax %VAR:FROM=TO% erreichen können:

echo !m:^&=^^^&! | clip

In der Befehlszeile wird mit "cmd /v" die verzögerte Expansion aktiviert:

cmd /v /c echo !m!

Dies funktioniert auch beim Schreiben in eine Pipe

cmd /v /c echo !m! | clip

Einfach.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X