我需要检查传递给Windows批处理文件的参数是否为数字.
我发现下面的答案是使用带有正则表达式的"findstr"命令:https: //superuser.com/questions/404338/check-for-only-numerical-input-in-batch-file
我确实尝试过这个解决方案,但它没有用.(至少在Windows 7中不起作用).
测试场景:
AA #NOT A VALID NUMBER
A1 #NOT A VALID NUMBER
1A #NOT A VALID NUMBER
11 #A VALID NUMBER
Run Code Online (Sandbox Code Playgroud)
Mag*_*goo 42
SET "var="&for /f "delims=0123456789" %%i in ("%1") do set var=%%i
if defined var (echo %1 NOT numeric) else (echo %1 numeric)
Run Code Online (Sandbox Code Playgroud)
更换%1用%yourvarname%适当的
End*_*oro 12
for ± integers(也测试前导零):
echo(%~1|findstr "^[-][1-9][0-9]*$ ^[1-9][0-9]*$ ^0$">nul&&echo numeric||echo not numeric
Run Code Online (Sandbox Code Playgroud)
小智 8
你可以试试这个。例如var,传递的变量%var%等于500。
set /a varCheck=%var%
if %varCheck% == %var% (goto :confirmed) else (exit /B)
exit /B
:confirmed
:: You can use %var% here, and it should only be executed if it is numerical!
Run Code Online (Sandbox Code Playgroud)
如果%var%等于 eg a3453d,则设置varCheck为0,因为0不等于a3453d,则退出批处理。
(第 3 行的退出只是为了防止 if 语句由于某种原因决定不执行……XD。)
@hornzach - 你是如此接近,而且答案比其他人要简单得多。
隐藏错误消息(至少在 win 7 中)重定向到标准错误输出 (2) 到 nul(一个特殊文件,悄悄丢弃输出“bit-bucket”)
set /a varCheck = %var% 2>nul
Run Code Online (Sandbox Code Playgroud)
然后您的其余答案适用于 4 个测试用例。
测试用例的完整答案:
call :CheckNumeric AA "#NOT A VALID NUMBER"
call :CheckNumeric A1 "#NOT A VALID NUMBER"
call :CheckNumeric 1A "#NOT A VALID NUMBER"
call :CheckNumeric 11 "#A VALID NUMBER"
call :CheckNumeric 1.23456789012345678901234567890.123456 "#NOT A VALID NUMBER"
goto :EOF
:CheckNumeric
@ECHO.
@ECHO Test %1
set /a num=%1 2>nul
if {%num%}=={%1} (
@ECHO %1 #A VALID NUMBER, Expected %2
goto :EOF
)
:INVALID
@ECHO %1 #NOT A VALID NUMBER, Expected %2
Run Code Online (Sandbox Code Playgroud)
输出:
Test AA
AA #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"
Test A1
A1 #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"
Test 1A
1A #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"
Test 11
11 #A VALID NUMBER, Expected "#A VALID NUMBER"
Test 1.23456789012345678901234567890.123456
1.23456789012345678901234567890.123456 #NOT A VALID NUMBER, Expected "#NOT A VALID NUMBER"
Run Code Online (Sandbox Code Playgroud)
最简单的正整数应该是:
IF 1%1 NEQ +1%1 echo Notnumeric!
Run Code Online (Sandbox Code Playgroud)
如果还要考虑负数(连字符),这将起作用
SET number=%1
if 1%1 EQU +1%1 echo positive number
if %1==-%number:-=% echo negative number
Run Code Online (Sandbox Code Playgroud)
从这里的这篇文章中学到