Batch File input validation - Make sure user entered an integer

前端 未结 16 2410
抹茶落季
抹茶落季 2020-12-03 14:33

I\'m experimenting with a Windows batch file to perform a simple operation which requires the user to enter a non-negative integer. I\'m using simple batch-file techniques t

16条回答
  •  被撕碎了的回忆
    2020-12-03 15:19

    You're probably not doing this in a DOS batch file. Or at least, support for set /p is unheard of for me in DOS :-)

    You could use substrings. In fact I have written a parser for a specific regular language that way once, but it's cumbersome. The easiest way would probably be to assign the contents of %userinput% to another variable, using set /a. If the result comes out as 0 you need to check whether the input itself was 0, otherwise you can conclude it was a non-number:

    @echo off
    setlocal enableextensions enabledelayedexpansion
    set /p UserInput=Enter a number: 
    set /a Test=UserInput
    if !Test! EQU 0 (
      if !UserInput! EQU 0 (
        echo Number
      ) else (
        echo Not a number
      )
    ) else (
      echo Number
    )
    

    However, this works only for numbers in the range of Int32. If you just care for any number (possibly floating-point as well) then you need to resort to the loop-based approach of dissecting it.

    NOTE: Updated to solve the space issues. However, there is still a problem lurking: Entering 123/5 yields "number", since set /a can evaluate this ...

提交回复
热议问题