Co oznacza znak procentu (% i %%) w argumencie pliku wsadowego?

11

Myślę, że coś mi umknęło, ponieważ nie mogę znaleźć, co to oznacza.

Przykład:

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

Ta linia miała używać wersji wiersza poleceń 7zipdo kompresji pojedynczych folderów, ale jestem zaskoczony, co %%Aoznacza w tym kontekście.

Jim Kieger
źródło
1
Pomylono wiersz poleceń i plik kąpieli. Zmieniono znak na górze.
Jim Kieger,

Odpowiedzi:

12

forKomenda potrzebuje zastępczy, dzięki czemu można przejść zmienne do wykorzystania później w zapytaniu, mówimy to użyć zastępczy %A, powód kod obejrzałeś zastosowań %%Ajest ponieważ wewnątrz pliku wsadowego (które zakładam, że jest gdzie znalazłeś tego) %ma specjalne znaczenie, więc musisz to zrobić dwa razy, aby zmienić je %%w jedno, %które zostanie przekazane do forpolecenia

Aby faktycznie rozdzielić to, co robi polecenie, polecenie składa się z dwóch części:

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

Ta część mówi, że dla każdego folderu w bieżącym folderze wykonaj następujące polecenie, zastępując %%Anazwę folderu aktualnie przetwarzanego.

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

To, co mówi ta część, to wykonanie polecenia "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"i zastąpienie ich dwoma %%Abieżącym rekordem, który przetwarzamy.

Scott Chamberlain
źródło
Po prostu nitpick - / D w pętli for ograniczy * symbol wieloznaczny do katalogów, a nie „każdego pliku w tym folderze i każdym podfolderze” (przy założeniu, że rozszerzenia poleceń są włączone).
ernie,
@ernie masz rację, patrzyłem na przełącznik / R na stronie pomocy, poprawiłem swoją odpowiedź.
Scott Chamberlain,
Dziękuję za to, pokazuje, jak to wydaje się noobish, ale to dość archaiczne rzeczy, które muszę przejrzeć w kilku instrukcjach online.
Jim Kieger,
0

To jest zmienna.

W tym konkretnym przykładzie użyto opcji katalogowej pętli FOR , iterującej po katalogach i przypisującej je do %% A.

To także nie jest przykład z wiersza poleceń, ale przykład pliku wsadowego. W plikach wsadowych musisz użyć %% A, podczas gdy w wierszu poleceń wystarczy użyć% A.

ernie
źródło
0

W twoim scenariuszu %% A jest symbolem zastępczym dla tego, co iteruje pętla „for” (w którym / D wskazuje katalogi). Tak więc każda iteracja pętli, %% A jest jednym z katalogów.

Zobaczysz %% zamiast% w kodzie partii. W wierszu polecenia zobaczysz% zamiast %%.

Więc wiedz, że jeśli skopiujesz kod pliku wsadowego do wiersza polecenia i uruchomisz go przy użyciu %%, wystąpi błąd i vice versa.

Mechaflash
źródło