我一直试图制作一个程序来检测输入的字符串是否包含+、-、*或/,然后计算它。问题是,无论字符串是否包含字符,总是定义var。
示例:
输入:不是数学命令
输出: var被定义(数学输入)
我想要的是: var没有定义
Input:10+10
输出: var被定义(数学输入)
我想要的是: var被定义了(数学输入)
输入: ABC123
输出: var被定义(数学输入)
我想要的是: var没有定义
我从这个链接修改了我的代码:
how to check if a parameter (or variable) is numeric in windows batch file
代码:
@echo off
SET "var="
set /p "COMMAND=Enter command>"
for /f "delims=^+-^*/" %%i in ("%COMMAND%") do set "var=%%i"
if not defined var (
echo var not defined
) else (
echo var is defined (math input)
)
pause
发布于 2017-07-21 01:23:56
啊-您正在使用的代码是用来检测所讨论的字符串是否只包含数字的数字。
您的要求似乎是检测字符串是否至少包含一个分隔符。
对于/f,“令牌=1*分隔符=^+-^*/”%i in (“%命令%”)设置“svar=%%i”和"var=%%j“
将svar
设置为前面的部分,将var
设置为在分隔符之后的部分,但将忽略任何前导分隔符字符,并且不会反对连续分隔符,如abc++//++def
,因为对tokens
的分区将主题字符串视为序列delimstoken1delimstoken2...
。
发布于 2017-07-21 12:52:35
为了确保%command%
中只有数字和算术运算符,有几种方法,
我会使用findstr.exe
有限的正则表达式特性。
由于%command%
中的空格会干扰结果,所以我删除它们
(减号必须用反斜杠转义,因为它表示类中的范围):
:: Q:\Test\2017\07\21\SO_45225802.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Cls
:loop
SET "var="
set /p "ArithmeticExpression=Enter arithmetic expression> "
:: Check if input consists of only numbers and operators
Echo:%ArithmeticExpression: =%|Findstr "^[0-9+\-*/][0-9+\-*/]*$" >NUL 2>&1
If Errorlevel 1 (
Echo Invalid characters in %ArithmeticExpression%
) Else (
Set /a "var=%ArithmeticExpression%"
If defined var (
Echo %ArithmeticExpression% evaluates to !var!
) Else (
Echo Error evaluating %ArithmeticExpression%
)
)
Goto :loop
样本运行:
Enter arithmetic expression> 1 + 1
1 + 1 evaluates to 2
Enter arithmetic expression> 10 * 3
10 * 3 evaluates to 30
Enter arithmetic expression> 30 -3
30 -3 evaluates to 27
Enter arithmetic expression> 27 / 3
27 / 3 evaluates to 9
Enter arithmetic expression> ABC123
Invalid characters in ABC123
Enter arithmetic expression> 10/0
Divide by zero error.
Error evaluating 10/0
Enter arithmetic expression>
https://stackoverflow.com/questions/45225802
复制相似问题