我如何检查输入是否是任何整数?

时间:2015-10-21 18:15:22

标签: windows batch-file cmd

  简单地问,我需要检查变量是否是数字。我知道以下的能力:

set /a variable1=%variable%

将非数字字符串设置为0,但我需要能够将0作为intiger和负数。

  

  这将经常运行,因此首选快速脚本。我试图将变量回显到.txt中,并使用for循环扫描并返回错误,如果检测到除0-9以外的任何内容,但脚本运行时间过长,坦白说是一团糟。

3 个答案:

答案 0 :(得分:1)

你可以对这种影响做些什么。删除所有号码。如果剩下任何东西,它不是整数。并不是说这是完美的,但它是朝着正确方向迈出的一步。

set "tempvar="
FOR /F "tokens=* delims=-0123456789" %%G IN ("%variable1%") DO SET "tempvar=%%G"

IF DEFINED tempvar echo NOT AN INTEGER

答案 1 :(得分:0)

@echo off 

:isInterer  input [returnVar] 
setlocal enableDelayedexpansion 
set "input=%~1" 

if "!input:~0,1!" equ "-" (
    set "input=!input:~1!"
) else (
    if "!input:~0,1!" equ "+" set "input=!input:~1!"
)

for %%# in (1 2 3 4 5 6 7 8 9 0) do ( 
        if not "!input!" == "" ( 
                set "input=!input:%%#=!" 
    )         
) 

if "!input!" equ "" ( 
        set result=true 
) else ( 
        set result=false 
) 

endlocal & if "%~2" neq "" (set %~2=%result%) else echo %result% 

试试这个。虽然!^这样的特殊符号可能会造成麻烦。 您还可以使用findstr:

@echo off 

:isIntererFindstr  input [returnVar] 
setlocal enableDelayedexpansion 
set "input=%~1" 

if "!input:~0,1!" equ "-" (
    set "input=!input:~1!"
) else (
    if "!input:~0,1!" equ "+" set "input=!input:~1!"
)

echo !input!|findstr /r "[^0-9]" >nul 2>&1

if %errorlevel% equ 0 ( 
        set result=false 
) else ( 
        set result=true 
)
endlocal & if "%~2" neq "" (set %~2=%result%) else echo %result% 

答案 2 :(得分:0)

有问题的17584282

最简单的数字应该是:

IF %1 NEQ +%1 echo Notnumeric!

如果还要考虑负数(连字符),则可以使用

SET number=%1
if %1 EQU +%1 echo positive number
if %1==-%number:-=% echo negative number

https://www.itprotoday.com/compute-engines/jsi-tip-9692-how-can-batch-script-determine-if-variable-or-parameter-integer那里学习