У нас есть командный файл, который принимает параметры.
Затем мы считываем значение параметра, используя% 1 в качестве первого параметра.
Вопрос: как мы можем проверить, что% 1 имеет значение?
В соответствии с http://www.robvanderwoude.com/parameters.php вы можете проверить их, если:
или
или
Вы можете перейти к значению% 1. Например, один из способов сделать это:
if "%1"=="" goto bad
:good
rem Do processing here
goto end
:bad
rem Do error handling here
:end
Итак, вот мое решение этой проблемы. Я использовал этот стиль для использования «Именованных параметров» вместо традиционных позиционных значений. Таким образом, проверка может выполняться по умолчанию и с использованием параметров.
@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
Значения пармаметра могут быть перечислены в файле, так что вам не нужно изменять командный файл, просто чтобы добавить новое значение. можно добавить больше текста для объяснения значений и т. д.
ты можешь попробовать это
Установить тест =% 1
если% test%. ==. (эхо-тест не установлен)