我一直在尝试创建一个程序,用于检测输入的字符串是否包含+, - ,*或/,然后对其进行评估。问题是var总是定义字符串是否包含字符。
输入:不是数学命令
输出:var已定义(数学输入
我想要的是:var未定义
输入: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
答案 0 :(得分:0)
啊 - 您使用的代码旨在检测相关字符串是否包含仅数字。
您的要求似乎是检测字符串是否包含至少一个分隔符。
for / f“tokens = 1 * delims = ^ + - ^ * /”%% i in(“%COMMAND%”)设置“svar = %% i”& set“var = %% j”
将svar
设置为之前的部分,var
设置为分隔符之后的部分,但它将忽略任何前导分隔符字符,并且不会反对连续的分隔符,例如abc++//++def
分区为tokens
,将主题字符串视为序列delimstoken1delimstoken2...
答案 1 :(得分:0)
为了确保%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>