Zoeken…


Opdrachtregelargumenten geleverd aan batchbestanden

Batchbestand opdrachtregelargumenten zijn parameterwaarden die worden ingediend bij het starten van de batch. Ze moeten tussen aanhalingstekens staan als ze spaties bevatten. In een actief batchbestand worden de argumenten voor verschillende doeleinden gebruikt, namelijk omleiding naar :labels , variabelen instellen of opdrachten uitvoeren.

De argumenten worden in het batchbestand gebruikt met %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!

Opmerkingen:

  • In het bovenstaande voorbeeld worden dubbele aanhalingstekens verwijderd met de argumentmodifier %~1 .
  • Lange tekenreeksen worden opgesplitst in meerdere regels met behulp van ^ en er staat een spatie vóór het teken op de volgende regel.

Batchbestanden met meer dan 9 argumenten

Wanneer meer dan 9 argumenten worden opgegeven, kan de opdracht shift [/n] worden gebruikt, waarbij /n betekent dat het argument n begint, n tussen nul en acht ligt.

Argumenten doorlopen:

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

Merk op dat in het bovenstaande voorbeeld vertraagde expansievariabele i wordt gebruikt om argumentwaarden toe te wijzen aan variabelenarray. Met call aanroepopdracht kunnen dergelijke variabele waarden binnen de lus worden weergegeven.

Argumenten tellen:

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

Stel een variabele in op het derde argument:

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

Verschuivende argumenten tussen haakjes

Laten we het volgende example.bat en het noemen met argumenten 1 , 2 en 3 :

@echo off

(
    shift
    shift
    echo %1
)

Aangezien de variabele uitbreiding zal veranderen nadat de context van de eindhaken is bereikt, zal de uitvoer zijn:

1

Omdat dit een probleem kan zijn bij het schakelen tussen haakjes om toegang te krijgen tot het argument dat u moet gebruiken:

@echo off

(
    shift
    shift
    call echo %%1
) 

nu wordt de uitvoer 3 . Aangezien het CALL commando wordt gebruikt (wat zal leiden tot extra variabele uitbreiding) met deze techniek, kunnen de toegangsargumenten ook worden geparametriseerd:

@echo off

set argument=1

    shift
    shift
    call echo %%%argument%

met vertraagde uitbreiding:

@echo off
setlocal enableDelayedExpansion
set argument=1

    shift
    shift
    call echo %%!argument!

de output zal zijn

3



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow