it-swarm.com.de

Wie kann ich in Batch-Dateien Et-Zeichen umgehen?

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.

123
Peter Mortensen

Aus einem cmd:

  • & ist wie folgt geschützt: ^& (basierend auf @Wael Dallouls answer )
  • % muss nicht mit Escapezeichen versehen 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 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
62

& wird zum Trennen von Befehlen verwendet. Daher können Sie ^ verwenden, um den & zu umgehen.

133
Wael Dalloul

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"
26
belugabob
Explorer "http://www.google.com/search?client=opera&rls=...."
19
adatapost

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.

11
Denis Howe

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
1

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

0
be-ns