batch-file
Batchfil kommandoradsargument
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