Sök…


Kommandoradsargument som levereras till batchfiler

Argument för kommandorad för batchfil är parametervärden som skickas in när batch startas. De bör bifogas citat om de innehåller mellanslag. I en körande batchfil används argumenten för olika syften, dvs. omdirigering till :labels , inställningsvariabler eller körningskommandon.

Argumenten hänvisas till i batchfilen med hjälp av %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!

Anmärkningar:

  • I exemplet ovan tas dubbla citat bort med hjälp av argumentmodifieraren %~1 .
  • Långa strängar delas upp till flera rader med ^ , och det finns ett mellanrum före tecknet på nästa rad.

Batchfiler med mer än 9 argument

När mer än 9 argument tillhandahålls kan shift [/n] -kommandot användas, där /n betyder att börja vid det nde argumentet, n är mellan noll och åtta.

Looping genom argument:

:args
set /a "i+=1"
set arg!i!=%~1
call echo arg!i! = %%arg!i!%%
shift
goto :args

Observera att i ovanstående exempel används en fördröjd expansionsvariabel i för att tilldela argumentvärden till variabler array. call gör det möjligt att visa sådana variabla värden inuti slingan.

Räkna argument:

for %%i in (%*) do (set /a ArgCount+=1)
echo %ArgCount%

Ställ in en variabel på n'th argument:

set i=5
call set "path%i%=%%~i"

Skiftande argument inom parentes

Låt oss ha följande example.bat och kalla det med argument 1 , 2 och 3 :

@echo off

(
    shift
    shift
    echo %1
)

Eftersom den variabla expansionen kommer att förändras efter att ändparentesens sammanhang har nåtts kommer utgången att vara:

1

Eftersom detta kan vara ett problem när du växlar inom parentes för att få åtkomst till det argument du behöver använda samtal:

@echo off

(
    shift
    shift
    call echo %%1
) 

nu blir utgången 3 . Eftersom CALL kommando används (vilket kommer att leda till ytterligare variabel utvidgning) med denna teknik kan argumenten som åtkomst också parametriseras:

@echo off

set argument=1

    shift
    shift
    call echo %%%argument%

med försenad expansion:

@echo off
setlocal enableDelayedExpansion
set argument=1

    shift
    shift
    call echo %%!argument!

utgången blir

3



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow