Wie entkomme ich kaufmännisches Und in einer Batchdatei (oder über die Windows-Befehlszeile), um mit dem start
Befehl Webseiten mit kaufmännischem Und in der URL zu öffnen?
Doppelte Anführungszeichen funktionieren nicht mit start
; Dadurch wird stattdessen ein neues Befehlszeilenfenster gestartet.
Update 1 : Die Lösung von Wael Dalloul funktioniert. Wenn die URL URL-codierte Zeichen enthält (z. B. Leerzeichen wird als% 20 codiert) und sich in einer Batchdatei befindet , muss '%' als '%%' codiert werden. 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 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.
windows
batch-file
escaping
ampersand
Peter Mortensen
quelle
quelle
start
der das Zitieren des Arguments fehlschlägt, wenn es ohne nachzudenken angewendet wird. Insgesamt denke ich, dass es einfacher und weniger fehleranfällig ist, das Argument in Anführungszeichen zu setzen, als jedem Zeichen zu entkommen, das dort entkommen muss.+
was soll ich vorstellen, um ihm zu entkommen?start "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
funktioniert, weil PowerShell Anführungszeichen entferntAntworten:
Von einem cmd :
&
wird wie folgt entkommen:^&
(basierend auf der Antwort von @Wael Dalloul )%
muss nicht entkommenEin Beispiel:
Aus einer Batch-Datei
&
wird wie folgt entkommen:^&
(basierend auf der Antwort von @Wael Dalloul )%
wird wie folgt maskiert:%%
(basierend auf dem OPs-Update)Ein Beispiel:
quelle
%
muss nicht maskiert werden, denn wer wäre dumm genug, um20and
als Umgebungsvariable zu definieren? Wenn Sie dies getan haben,start http://www.google.com/search?q=ampersand%20and%20percentage
könnten Siehttp://www.google.com/search?q=ampersandsomething-silly20percentage
stattdessen auf verlinken . Mit^%
Escape in cmd funktioniert das Beispiel wie erwartet.&
wird verwendet, um Befehle zu trennen. Daher können Sie verwenden^
, um die zu entkommen&
.quelle
+
was soll ich vorstellen, um ihm zu entkommen?^
wäre von unschätzbarem Wert.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 wird, wenn es in Anführungszeichen steht. Folgendes sollte also funktionieren (und funktioniert hier):quelle
start "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
auf PowerShellquelle
Der Befehl
funktioniert wie erwartet und gibt aus
Der Befehl
funktioniert auch, indem der String in die Datei "tmp" geschrieben wird. Allerdings vor einem Rohr
das ^ wird ganz anders interpretiert. Es wird versucht, die Ausgabe der beiden Befehle "echo this" und "that" in die Pipe zu schreiben. Das Echo funktioniert dann "das" gibt einen Fehler aus. Sprichwort
wird die Zeichenfolgen "dies" und "das" in die Zwischenablage setzen.
Ohne das ^:
Das erste Echo wird in die Konsole geschrieben und nur die Ausgabe des zweiten Echos wird an den Clip weitergeleitet (ähnlich wie 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 leiten, müssen Sie es zweimal zitieren
Wenn Sie die Zeichenfolge in eine Variable einfügen
dann
wird ausgegeben
aber das Offensichtliche
schlägt fehl, weil, nachdem Windows die Variable ersetzt hat, was zu
Es analysiert dies als neuen Befehl und versucht, "das" auszuführen.
In einer Batchdatei können Sie die verzögerte Erweiterung verwenden :
Um in eine Pipe auszugeben, müssen wir alle & s im Variablenwert durch ^ & ersetzen, was wir mit der Syntax% VAR: FROM = TO% tun können:
In der Befehlszeile aktiviert "cmd / v" die verzögerte Erweiterung:
Dies funktioniert auch beim Schreiben in eine Pipe
Einfach.
quelle
echo this ^^^& that | clip
funktioniert auch. Um das Magic Pipe-Handling zu verstehen, lesen Sie SO: Warum schlägt die verzögerte Erweiterung fehl, wenn Sie sich in einem Pipeline-Codeblock befinden?Wenn Sie
echo
eine Zeichenfolge benötigen , die ein kaufmännisches Und enthält, helfen Anführungszeichen nicht, da sie auch in der Ausgabe angezeigt werden. Verwenden Sie in einem solchen Fallfor
:... in einem Batch-Skript:
oder
quelle
Wenn Sie Leerzeichen im Namen der Datei haben und ein Zeichen haben, müssen Sie entkommen:
Sie können einfache UND doppelte Anführungszeichen verwenden, um Fehlbezeichnungen im Befehl zu vermeiden.
Der
^
Charakter entweicht die Zitate aus anderen Gründen .quelle