简单地问,我需要检查变量是否是数字。我知道以下的能力:
set /a variable1=%variable%
将非数字字符串设置为0,但我需要能够将0作为intiger和负数。
这将经常运行,因此首选快速脚本。我试图将变量回显到.txt中,并使用for循环扫描并返回错误,如果检测到除0-9以外的任何内容,但脚本运行时间过长,坦白说是一团糟。
答案 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