Was bedeutet das Prozentzeichen (% und %%) in einem Batchdatei-Argument?

11

Ich glaube, ich vermisse etwas, weil ich anscheinend nicht finde, was das bedeutet.

Beispiel:

for /D %%A in (*) do "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

Diese Zeile sollte eine Befehlszeilenversion von verwenden 7zip, um einzelne Ordner zu komprimieren, aber ich bin ratlos, was %%Adies in diesem Zusammenhang bedeutet.

Jim Kieger
quelle
1
Kommandozeile und Badedatei verwirrt. Das Schild oben wurde geändert.
Jim Kieger

Antworten:

12

Der forBefehl benötigt einen Platzhalter, damit Sie Variablen zur späteren Verwendung in der Abfrage weitergeben können. Wir sagen, dass er den Platzhalter verwendet %A. Der Grund, warum der Code, den Sie gesehen haben, verwendet wird, %%Aliegt darin, dass in einer Batch-Datei (von der ich annehme, dass Sie diese gefunden haben) die %hat eine besondere Bedeutung, daher müssen Sie dies zweimal tun, %%damit es in eine einzelne umgewandelt wird %, die an den forBefehl übergeben wird

Um tatsächlich zu trennen, was der Befehl tut, besteht der Befehl aus zwei Teilen:

 for /D %%A in (*) do .....

In diesem Teil heißt es, dass Sie für jeden Ordner im aktuellen Ordner den folgenden Befehl ausführen und %%Adurch den Namen des aktuell verarbeiteten Ordners ersetzen .

..... "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

In diesem Teil heißt es, den Befehl auszuführen "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"und die beiden %%Adurch den aktuellen Datensatz zu ersetzen, den wir verarbeiten.

Scott Chamberlain
quelle
Nur zum Nitpicken - das / D in der for-Schleife beschränkt den Platzhalter * auf Verzeichnisse, nicht auf "jede Datei in diesem Ordner und jeden Unterordner" (vorausgesetzt, die Befehlserweiterungen sind aktiviert).
ernie
@ernie du bist richtig, ich habe auf den / R-Schalter auf der Hilfeseite geschaut, ich habe meine Antwort korrigiert.
Scott Chamberlain
Vielen Dank dafür, es zeigt, wie noobisch das scheint, aber es ist ziemlich archaisches Zeug, für das ich ein paar Online-Handbücher durchforsten muss.
Jim Kieger
0

Es ist eine Variable.

In diesem Beispiel wird die Verzeichnisoption einer FOR-Schleife verwendet , die die Verzeichnisse durchläuft und sie %% A zuweist.

Dies ist auch kein Befehlszeilenbeispiel, sondern ein Beispiel für eine Batchdatei. In Batch-Dateien müssen Sie %% A verwenden, während Sie in der Befehlszeile nur% A verwenden.

Ernie
quelle
0

In Ihrem Szenario ist %% A ein Platzhalter für das, worüber die "for" -Schleife iteriert (wobei / D Verzeichnisse angibt). Bei jeder Iteration der Schleife ist %% A eines der Verzeichnisse.

Im Batch-Code wird %% anstelle von% angezeigt. In Ihrer Eingabeaufforderung wird% anstelle von %% angezeigt.

Wenn Sie also einen Batch-Dateicode in eine Eingabeaufforderung kopieren und mit %% ausführen, tritt ein Fehler auf und umgekehrt.

Mechaflash
quelle