Unterschied zwischen % und %% in einer Batch-Datei
-
Verwendung von
%
und%%
in CMD -
Verwendung von
%
und%%
in einer Batch-Datei - Verwendung der verzögerten Erweiterung in einer Batch-datei
Stapelprogrammierer verwechseln häufig einfache Prozentzeichen (%
) und doppelte Prozentzeichen (%%
), wenn sie in einer Batch-datei verwendet werden. Bei Ausführung auf der Befehlszeile verwendet der Befehl FOR
%f
, während er in einer Batch-Datei %%f
anstelle eines einzelnen Prozentzeichens verwendet.
Die Symbole %
, %%
, %variable%
und !variable!
weisen einige grundlegende Unterschiede auf und werden in der Befehlszeile und in Batch-Dateien unterschiedlich verwendet.
Dieses Tutorial demonstriert den Unterschied zwischen %
und %%
in einer Batch-Datei. Außerdem wird die Verwendung von %
und %%
in Batch-Dateien und cmd sowie Umgebungsvariablen und Schleifenvariablen erläutert.
Verwendung von %
und %%
in CMD
In einer Befehlszeilen-Shell gibt die %variable
einen durch einen einzelnen Buchstaben ersetzbaren Parameter an. Ms-DOS verwendet %1,%2,...,%9
als ersetzbare Befehlszeilenparameter, d. h. %1
wird durch den ersten Parameter ersetzt, der an die Batch-Datei übergeben wird.
Das folgende Beispiel zeigt, dass ein einzelnes Prozentzeichen mit einer Variablen (%a
) als null
-Zeichen fungiert:
set a="Hello World"
echo %a
Wenn das Prozentzeichen auf beiden Seiten einer Variablen verwendet wird, d. h. %VARIABLE%
, fungiert es als Umgebungsvariable und zeigt den eingestellten Wert an, wenn es mit dem Befehl echo
verwendet wird. Die %VARIABLE%
kann mit dem set
-Befehl gesetzt und mit dem echo
-Befehl aufgerufen werden.
Das Beispiel ist unten gezeigt.
set a="Hello World"
echo %a%
Verwendung von %
und %%
in einer Batch-Datei
In Batch-Dateien liest die Befehlszeilen-Shell alle Befehle von links nach rechts. Wenn es das Prozentzeichen liest, fährt es fort, indem es das nächste Zeichen prüft.
Es liest %%
als einzelnes %
, ersetzt also %%
durch ein einzelnes Prozent und liest das dritte Zeichen. Wenn es sich in einer FOR
-Schleife befindet, wird es wie in einer FOR
-Schleife ausgewertet.
Das folgende Beispiel erklärt die Verwendung von %%
in einer FOR
-Schleife.
FOR /L %%3 in (1,1,3) Do Echo %%3
PAUSE
Ausgang:
Wenn es sich nicht um eine FOR
-Schleife handelt, wird es als einfaches Zeichen gelesen und bei direkter Ausführung in der Befehlszeilen-Shell genauso ausgeführt wie der Befehl %variable
.
set a="Hello World"
echo %%a
PAUSE
Ausgang:
Wenn das Zeichen nach dem %
-Zeichen eine Zahl ist, wird es als Befehlszeilenparameter gelesen. Wenn das Zeichen nach %
weder ein %
-Symbol noch eine Zahl ist, wird es bis zum nächsten %
-Zeichen als Variable gelesen; dann zeigt es seinen Wert an.
Zum Beispiel,
set a="Hello World"
echo %a%
PAUSE
Ausgang:
Um ein einfaches %
-Symbol in einer Batch-Datei wie 50%
zu verwenden, müssen Sie das %%
anstelle eines einzelnen %
-Zeichens verwenden.
set a="The battery is charged 50%%"
echo %a%
PAUSE
Ausgang:
Die %
und %%
werden hauptsächlich im FOR
-Befehl verwendet. Wenn der Befehl FOR
außerhalb einer Batch-Datei verwendet wird, funktioniert ein einzelnes %
-Zeichen gut.
Aber wenn es innerhalb einer Batch-Datei verwendet wird, sollte es durch doppeltes %%
ersetzt werden, um Fehler zu vermeiden. Außerdem wird empfohlen, keine Zahlen mit dem %
-Zeichen als FOR
-Befehlsparameter zu verwenden.
Verwendung der verzögerten Erweiterung in einer Batch-datei
Manchmal druckt die Verwendung von %VARIABLE%
in einer Batch-Datei das Ergebnis nicht. Dies liegt daran, dass die Variable nach Abschluss der prozentualen Erweiterung vor der Ausführung, d. h. zum Zeitpunkt der Analyse, erweitert wird.
Bei der Verwendung in Schleifen werden die Variablen nur einmal expandiert.
Um dies zu lösen, können Sie eine verzögerte Erweiterung verwenden, d. h. ein Ausrufezeichen (!variable!
) anstelle eines Prozentzeichens (!variable!
). Die Variable wird zur Ausführungszeit erweitert, wenn die verzögerte Erweiterung aktiviert ist.
In einer Schleife wird es jedes Mal erweitert, wenn die Schleife iteriert wird. Erweitern Sie daher eine Variable mit !
anstelle von %
wird empfohlen, hauptsächlich wenn Schleifen verwendet werden.
Um die verzögerte Erweiterung zu aktivieren, können wir dies mit dem Befehl SETLOCAL EnableDelayedExpansion
tun und %
durch !
ersetzen, wie im folgenden Beispiel gezeigt.
@echo off
setlocal EnableDelayedExpansion
:: count to 5, storing results in a variable
set n=0
FOR /l %%G in (1,1,5) Do (echo [!n!] & set /a n+=1)
echo Total = %n%
Ausgang:
Wir haben also den Unterschied zwischen den Zeichen %
und %%
besprochen, wenn sie in einer Batch-Datei und cmd verwendet werden. Wir haben fast alles abgedeckt, einschließlich der Verwendung von verzögerter Erweiterung.