How to check if a parameter (or variable) is a number in a Batch script

后端 未结 10 535
南方客
南方客 2020-12-01 08:02

I need to check if a parameter that is passed to a Windows Batch file is a numeric value or not. It would be good for the check to also works for variables.

I found a

10条回答
  •  無奈伤痛
    2020-12-01 08:49

    I use this function instead, it seems to work for me without any issues...

    The Script (mytestscript.bat)

    REM == Script variables =============================================
    SET "NUMCODE=%1"
    SET "NAME=%2"
    
    REM == Main script ==================================================
    CALL :Validate "NUMCODE"
    IF ERRORLEVEL 1 EXIT /B %ERRORLEVEL%
    CALL :Validate "NAME"
    IF ERRORLEVEL 1 EXIT /B %ERRORLEVEL%
    
    ECHO Validation Complete and all variables passed validation.
    
    REM == Functions ====================================================
    :IsNumeric [string-value] [return-val]
        SET "stringVal=%~1"
        SET /A numericVal=%stringVal% > nul 2> nul
        IF "%stringVal%"=="%numericVal%" (SET "%~2=1") ELSE (SET "%~2=0")
        EXIT /B 0
    
    :Validate
        SET PASSEDVALIDATION=0
    
        ECHO Validating %~1...
    
        IF "%~1"=="NUMCODE" (
            ECHO - Value: %NUMCODE%
            IF NOT "%NUMCODE%"=="" SET PASSEDVALIDATION=1
            IF "!PASSEDVALIDATION!"=="1" (
                CALL :IsNumeric %NUMCODE% RETVAL
                SET PASSEDVALIDATION=!RETVAL!
            )
            IF "!PASSEDVALIDATION!"=="1" (
                IF NOT %NUMCODE% GEQ 1 SET PASSEDVALIDATION=0
            )
            IF "!PASSEDVALIDATION!"=="1" (
                IF NOT %NUMCODE% LEQ 526 SET PASSEDVALIDATION=0
            )
            IF "!PASSEDVALIDATION!"=="0" (
                ECHO - The first parameter is invalid, it can not be blank.
                ECHO - Valid value is a number from 1 to 526.
                ECHO - Leading zeros are not valid.
            )
        )
    
        IF "%~1"=="NAME" (
            ECHO - Value: %NAME%
            IF NOT "%NAME%"=="" SET PASSEDVALIDATION=1
            IF "!PASSEDVALIDATION!"=="0" (
                ECHO - The second parameter is invalid, it can not be blank.
            )
        )
    
        IF "!PASSEDVALIDATION!"=="0" (
            ECHO - Failed validation.
            EXIT /B 1
        ) ELSE (
            ECHO - Passed validation.
        )
        EXIT /B 0
    

    Usage Examples:

    C:\mytestscript.bat 10 MrTest
    Validating NUMCODE...
    - Value: 10
    - Passed validation.
    
    Validating NAME...
    - Value: MrTest
    - Passed validation.
    
    C:\mytestscript.bat 600
    Validating NUMCODE...
    - Value: 600
    - The first parameter is invalid, it can not be blank.
    - Valid value is a number from 1 to 526.
    - Leading zeros are not valid.
    - Failed validation.
    
    C:\mytestscript.bat 10
    Validating NUMCODE...
    - Value: 10
    - Passed validation.
    
    Validating NAME...
    - Value: 
    - The second parameter is invalid, it can not be blank.
    - Failed validation.
    

提交回复
热议问题