Unterschied zwischen % und %% in einer Batch-Datei

Siddharth Bishnoi 20 März 2023
  1. Verwendung von % und %% in CMD
  2. Verwendung von % und %% in einer Batch-Datei
  3. Verwendung der verzögerten Erweiterung in einer Batch-datei
Unterschied zwischen % und %% 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

% in CMD verwenden

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%

Ausgabe - % in CMD verwenden

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

Verwendung von %% in for Loop

Ausgang:

Ausgabe - Verwendung von %% in for Loop

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

Verwendung von %% als einfaches Zeichen

Ausgang:

Ausgabe - Verwendung von %% als einfaches Zeichen

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

Verwendung des %-Zeichens für Variablen

Ausgang:

Ausgabe - Verwendung des %-Zeichens für Variablen

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

Eine %-Zeichenfolge lesen

Ausgang:

Output - Read a % Sign in String

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%

Use of Delayed Expansion

Ausgang:

Output - Use of Delayed Expansion

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.

Verwandter Artikel - Batch Command