Pregunta Comprobación de parámetros en un archivo por lotes de DOS


Tenemos un archivo por lotes que toma parámetros.

Luego leemos el valor del parámetro usando% 1 para el primer parámetro.

La pregunta es: ¿Cómo podemos comprobar que% 1 tiene un valor?


7
2018-03-02 12:50


origen




Respuestas:


Puede bifurcarse en el valor de% 1. Por ejemplo, una forma de hacerlo es

if "%1"=="" goto bad

:good

rem Do processing here

goto end

:bad

rem Do error handling here

:end

2
2018-03-02 13:14



Sus %1no %1% - grawity
Buena captura, fija - dsolimano


De acuerdo a http://www.robvanderwoude.com/parameters.php Puedes consultarlos con un if:

  • IF "% 1" == "" para parámetros no citados

o

  • IF [% 1] == []

o

  • IF "% ~ 1" == "" (solo NT4 + SP6 y versiones posteriores)

6
2018-03-02 13:10





Así que aquí está mi solución a este problema. He usado este estilo para usar "Parámetros con nombre" en lugar de los valores posicionales tradicionales. De esa manera, la validación se puede hacer en forma predeterminada y se usa parms.

@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

Los valores de parámetros podrían aparecer en un archivo, de modo que no tiene que cambiar el archivo por lotes, solo para agregar un nuevo valor. y se podría agregar más texto para explicar los valores, etc.


1
2018-02-22 01:25





puedes probar esto

Prueba de set =% 1

si% prueba%. ==. (prueba de eco no establecida)


0
2018-03-02 13:17