Wie kann ich ein kaufmännisches Und-Zeichen in einer Stapeldatei (oder von der Windows-Befehlszeile) entfernen, um den Befehl start
zu verwenden, um Webseiten mit ampersand in der URL zu öffnen?
Doppelte Anführungszeichen funktionieren nicht mit start
; Dadurch wird stattdessen ein neues Befehlszeilenfenster gestartet.
Update 1 : Wael Dallouls Lösung funktioniert. Wenn URL-kodierte Zeichen (z. B. Leerzeichen als % 20) in der URL enthalten sind und in einer Batchdatei enthalten ist, muss '%' als %% '. Dies ist im 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
wird darin enden, dass
http://www.google.com/search?client=opera
wird im Standardbrowser geöffnet und diese Fehler werden im Befehlszeilenfenster angezeigt:
'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.
Aus einem cmd:
&
ist wie folgt geschützt: ^&
(basierend auf @Wael Dallouls answer )%
muss nicht mit Escapezeichen versehen werdenEin 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 Batchdatei
&
ist wie folgt geschützt: ^&
(basierend auf @Wael Dallouls answer )%
ist wie folgt maskiert: %%
(basierend auf dem OPs-Update)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
&
wird zum Trennen von Befehlen verwendet. Daher können Sie ^
verwenden, um den &
zu umgehen.
Sie können es in Anführungszeichen setzen, wenn Sie ein erstes Dummy-Argument angeben.
Beachten Sie, dass Sie in diesem Fall ein erstes Dummy-Argument angeben müssen, da start
das erste Argument als Titel für die neuen Konsolenfenster behandelt, wenn es in Anführungszeichen steht. Folgendes sollte also funktionieren (und hier):
start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
Explorer "http://www.google.com/search?client=opera&rls=...."
Der Befehl
echo this ^& that
funktioniert wie erwartet, Ausgabe
this & that
Der Befehl
echo this ^& that > tmp
funktioniert auch, indem der String in die Datei "tmp" geschrieben wird. Allerdings vor einer Pfeife
echo this ^& that | clip
das ^ wird völlig anders interpretiert. Es wird versucht, die Ausgabe der beiden Befehle "Echo this" und "that" in die Pipe zu schreiben. Das Echo funktioniert dann "das" wird einen Fehler geben. Sprichwort
echo this ^& echo that | clip
fügt die Zeichenfolgen "this" und "that" in die Zwischenablage ein.
Ohne das ^:
echo this & echo that | clip
das erste Echo wird auf die Konsole geschrieben, und nur die Ausgabe des zweiten Echos wird an den Clip weitergeleitet (ähnlich bei der Umleitung "> tmp"). Wenn also die Ausgabe umgeleitet wird, zitiert das ^ nicht das &, sondern bewirkt, dass es vor und nicht nach der Umleitung angewendet wird.
Um ein & zu pfeifen, müssen Sie es zweimal angeben
echo this ^^^& that | clip
Wenn Sie den String in eine Variable einfügen
set m=this ^& that
dann
set m
wird ausgegeben
m=this & that
aber das offensichtlich
echo %m%
schlägt fehl, weil nach Windows die Variable ersetzt, was zu
echo this & that
es parst dies als neuen Befehl und versucht "das" auszuführen.
In einer Batchdatei können Sie delayed extension verwenden:
setlocal enableDelayedExpansion
echo !m!
Für die Ausgabe in eine Pipe müssen wir alle & s im Variablenwert durch ^ & ersetzen, was mit der% VAR: FROM = TO% -Syntax möglich ist:
echo !m:^&=^^^&! | clip
In der Befehlszeile ermöglicht "cmd/v" eine verzögerte Erweiterung:
cmd /v /c echo !m!
Dies funktioniert auch beim Schreiben in eine Pipe
cmd /v /c echo !m! | clip
Einfach.
Wenn Sie echo
benötigen, ist eine Zeichenfolge, die ein kaufmännisches Und-Anführungszeichen enthält, nicht hilfreich, da Sie sie auch in der Ausgabe sehen würden. In diesem Fall verwenden Sie for
:
for %a in ("First & Last") do echo %~a
... in einem Batch-Skript:
for %%a in ("First & Last") do echo %%~a
oder
for %%a in ("%~1") do echo %%~a
Hinzufügen für zukünftige Benutzer -
WENN Sie Leerzeichen im Namen der Datei haben UND Sie ein Zeichen haben, dem Sie entkommen müssen:. Sie können einfache und doppelte Anführungszeichen verwenden, um Missverständnisse im Befehl zu vermeiden.
scp ./'files name with spaces/internal folder with spaces/"text & files stored.txt"' .
Das Zeichen ^
wird ansonsten den Anführungszeichen entzogen
bearbeitet, um den schließenden .
am Ende des Befehls aufzunehmen