batch-file
Argumenty wiersza polecenia pliku wsadowego
Szukaj…
Argumenty wiersza poleceń dostarczone do plików wsadowych
Argumenty wiersza poleceń pliku wsadowego to wartości parametrów przesyłane podczas uruchamiania wsadu. Powinny być ujęte w cudzysłowy, jeśli zawierają spacje. W uruchomionym pliku wsadowym argumenty są używane do różnych celów, tj. Do przekierowania do :labels
, ustawiania zmiennych lub uruchamiania poleceń.
Argumenty są przywoływane w pliku wsadowym przy użyciu %1, %2, ..., %9
.
@echo off
setlocal EnableDelayedExpansion
if not "%1"=="" (
set "dir=%~1" & set "file=%~2"
type !dir!\!file! | find /n /i "True" >nul^
&& echo Success! || echo Failure
)
exit /b
C:\Users\UserName> test.bat "C:\Temp\Test Results" "Latest.log"
Success!
Uwagi:
- W powyższym przykładzie podwójne cudzysłowy są usuwane przy użyciu modyfikatora argumentów
%~1
. - Długie ciągi znaków są dzielone na kilka wierszy za pomocą
^
, a przed znakiem w następnym wierszu jest spacja.
Pliki wsadowe z więcej niż 9 argumentami
Jeśli podano więcej niż 9 argumentów, można użyć polecenia shift [/n]
, gdzie /n
oznacza rozpoczęcie od n-tego argumentu, n wynosi od zera do ośmiu.
Pętla za pomocą argumentów:
:args
set /a "i+=1"
set arg!i!=%~1
call echo arg!i! = %%arg!i!%%
shift
goto :args
Uwaga: w powyższym przykładzie zmienna opóźnionego rozszerzenia i
jest używana do przypisywania wartości argumentów do tablicy zmiennych. Polecenie call
pozwala wyświetlić takie zmienne wartości w pętli.
Liczenie argumentów:
for %%i in (%*) do (set /a ArgCount+=1)
echo %ArgCount%
Ustaw zmienną na n-ty argument:
set i=5
call set "path%i%=%%~i"
Przesuwanie argumentów w nawiasach
Weźmy następujący example.bat
i nazwijmy go argumentami 1
, 2
i 3
:
@echo off
(
shift
shift
echo %1
)
Ponieważ rozszerzenie zmiennej zmieni się po osiągnięciu kontekstu nawiasów końcowych, wynikiem będzie:
1
Ponieważ może to być problem podczas przesuwania się w nawiasach, aby uzyskać dostęp do argumentu, musisz użyć wywołania:
@echo off
(
shift
shift
call echo %%1
)
teraz wyjście będzie wynosić 3
. Ponieważ w tej technice używane jest polecenie CALL
(które doprowadzi do dodatkowego rozszerzenia zmiennych), dostęp do argumentów można również sparametryzować:
@echo off
set argument=1
shift
shift
call echo %%%argument%
z opóźnionym rozszerzeniem:
@echo off
setlocal enableDelayedExpansion
set argument=1
shift
shift
call echo %%!argument!
wyjście będzie
3)