在DOSbatch file中检查参数

我们有一个需要参数的batch file

然后我们使用%1读取第一个参数的值。

问题是:我们如何检查%1是否有值?

您可以分支%1的值。 例如,一种方法是

if "%1"=="" goto bad :good rem Do processing here goto end :bad rem Do error handling here :end 

http://www.robvanderwoude.com/parameters.php你可以检查他们与如果:

  • IF“%1”==“”表示非引用的参数

要么

  • IF [%1] == []

要么

  • IF“%〜1”==“”(只有NT4 + SP6及更高版本)

所以这是我解决这个问题的方法。 我已经使用这种风格来使用传统位置值的“命名参数”。 这样,可以在默认和使用的参数上进行validation。

 @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: batchparms.bat = This is an example of named parameters in a batch file. :: :: This demonstrates the ability to name parameters instead of the current :: :: positional restrictions provided natively. :: :: :: :: Parameters: :: :: -first = First named parm. Should be AAA BBB or CCC [Default is AAA] :: :: -second = Second named parm. Should be XXX YYY or ZZZ [Default is ZZZ] :: :: -flagone = First named switch [Default is TRUE] :: :: -flagtwo = Second named switch [Default is TRUE] :: :: :: :: 02/19/2010 - HighDesertRaider :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: :: 02/22/2012 - Modified to be used as a Demo :: :: - HighDesertRaider :: :: :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: Set Environment :: :: These flags need to be set off to use named parameters :: SET FLAG_FIRST=0 SET FLAG_SECOND=0 SET FLAG_ONE=0 SET FLAG_TWO=0 :: :: Set Default Values :: CLS SET PARM_FIRST=AAA SET PARM_SECOND=ZZZ SET PARM_ONE=1 SET PARM_TWO=1 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Parse the input parameters, and assign the arguments to variables. :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: FOR %%A in (%*) DO ( IF !FLAG_FIRST!==1 ( SET PARM_FIRST=%%A SET FLAG_FIRST=0 ) ELSE ( IF !FLAG_SECOND!==1 ( SET PARM_SECOND=%%A SET FLAG_SECOND=0 ) ELSE ( IF /I %%A==-FIRST ( SET FLAG_FIRST=1 ) ELSE ( IF /I %%A==-SECOND ( SET FLAG_SECOND=1 ) ELSE ( IF /I %%A==-FLAGONE ( SET PARM_ONE=0 ) ELSE ( IF /I %%A==-FLAGTWO ( SET PARM_TWO=0 ) ELSE ( SET BADPARMMSG=Parameter %%A is not a valid option. GOTO:BadFormExit))))))) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Validate -ParmFirst :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :ValidateParmFirst ECHO Validate -ParmFirst %PARM_FIRST% FOR %%A in (AAA BBB CCC) DO ( IF /I %PARM_FIRST%==%%A ( GOTO ValidParmFirst)) :: :: A Valid Parm Value was not found in the list :: SET BADPARMMSG=Value %PARM_FIRST% is not a valid value for -ParmFirst ECHO Please select one of the following values: ECHO AAA ECHO BBB ECHO CCC GOTO BadFormExit :ValidParmFirst ECHO Value %PARM_FIRST% is valid for -ParmFirst ECHO. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Validate -ParmSecond :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :ValidateParmSecond ECHO Validate -ParmSecond %PARM_SECOND% FOR %%A in (XXX YYY ZZZ) DO ( IF /I %PARM_SECOND%==%%A ( GOTO ValidParmSecond)) :: :: A Valid Parm Value was not found in the list :: SET BADPARMMSG=Value %PARM_FIRST% is not a valid value for -ParmSecond ECHO Please select one of the following values: ECHO XXX ECHO YYY ECHO ZZZ GOTO BadFormExit :ValidParmSecond ECHO Value %PARM_SECOND% is valid for -ParmSecond ECHO. :: :: :: ECHO. ECHO The value of -first is %PARM_FIRST% ECHO The value of -second is %PARM_SECOND% ECHO The value of -flagone is %PARM_ONE% ECHO The value of -flagtwo is %PARM_TWO% ECHO. GOTO:RunMyCodeCauseIGotGoodParms :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: This function shows the user the correct form to use :: :: and exits the script. :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :BadFormExit ECHO. ECHO Sorry friend, but your form is bad. ECHO. ECHO batchparms.bat %* is not correct. ECHO Reason: %BADPARMMSG% ECHO. ECHO the correct syntax for this command is: ECHO "batchparms.bat [-first AAA | BBB | CCC] [-second XXX | YYY | ZZZ] [-flagone] [-flagtwo]" EXIT /B 1 :RunMyCodeCauseIGotGoodParms :: :: Insert Code Here to Run once Parms are Validated :: EXIT /B 

Parmameter值可以列在文件中,这样就不必更改batch file,只需添加一个新值即可。 可以添加更多的文字来解释价值观等。

你可以试试这个

设置testing=%1

如果%test%。==。 (回声testing未设置)