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)



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow