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.



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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.