Beispiel für eine verzögerte Erweiterung in der Batch-Datei
Kann mir jemand ein Beispiel, wo ein batch-Skript würde anders handeln, mit oder ohne verzögerte Erweiterung? Gibt es irgendwelche Situationen, wo Sie NICHT verwenden möchten, verzögerte Erweiterung? Danke.
InformationsquelleAutor der Frage Neil Weicher | 2012-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die folgenden Beispiele...
Beispiel 1: Der folgende code NICHT verwendet, verzögert die expansion, also die Variablen in der for-Schleife erweitert werden, nur ein mal. Dies bedeutet, dass
%Count%
immer zu erweitern, um0
in jeder iteration der Schleife, egal was wir tun, um es mit dem set-Befehl:So, in diesem Skript wird die Ausgabe:
Dies ist nicht, wie diese Schleife funktionieren soll.
Beispiel 2: Auf der anderen Seite, wenn wir die verzögerte Erweiterung, haben wir das folgende Skript, welches ausgeführt wird, wie erwartet.
und, wie erwartet, wird es ausgegeben wird:
Wenn Sie die
ENABLEDELAYEDEXPANSION
, und erweitern Sie eine variable mit!
statt%
ist, wird die variable wieder erweitert jedes mal, und alles funktioniert wie es soll.InformationsquelleAutor der Antwort Max
Max ' Antwort gibt ein Beispiel, wo ein batch-Skript würde anders handeln, mit oder ohne verzögerte Erweiterung.
Der Vollständigkeit halber, wir beantworten Sie den anderen Teil der Frage-und-show einer situation, wo Sie würden NICHT wollen, um zu verwenden, verzögerte Erweiterung, wenn Ihre Daten enthalten ein Ausrufezeichen
!
(und zeigen zwei Möglichkeiten der Verarbeitung solcher Daten):Beachten Sie, dass obige Skript zeigt die richtigen Wege der Flucht
%
Prozentzeichen durch%%
verdoppeln (verzögerte Erweiterung spielt keine Rolle), und!
Ausrufezeichen, wenn verzögerte Erweiterung aktiviert ist:"^!"
wenn eingeschlossen, in der ein paar doppelte Anführungszeichen enthält, dann verwenden Sie diecmd
- und batch-Skript Allgemeinen escape-Zeichen^
caret;^^^!
verwenden Sie andernfalls drei^
carets.Ausgabe:
InformationsquelleAutor der Antwort JosefZ
Wollte ich hinzufügen, dass ein großartiges Beispiel, wie "EnableDelayedExpansion" (EDE) kann hilfreich sein, außerhalb der allgegenwärtigen FOR-Schleife Beispiele.
Hier ist eine Reihe von Erdbeben Daten, die ich Wünsche, zu analysieren (ich nenne es es 1line.txt)
ak_11574812 2015.04.29.193822 62.9525 -148.8849 1.0 9.5 1 49 km S von Cantwell, Alaska
Das problem, das ich gestoßen bin, war, dass im letzten segment dieser Linie nicht immer beginnen in der gleichen Spalte Anzahl. So ich brauchte, um zu schaffen ein flexibles SET-Befehl, der genau zu pflücken das Letzte segment dieser Linie.
EDE erlaubt mir, statt einer variable (wo) in eine andere variable (Zeile). EDE übersetzen Sie die variable in Klammern durch % die erste, dann die variable in Klammern!!! und (in diesem Fall) push-out der Ergebnisse in der "suchen" - variable.
InformationsquelleAutor der Antwort Bruce Sinkula