检查字符串是否包含一组不起作用的字符批处理



我一直在尝试制作一个程序来检测输入的字符串是否包含 +、-、* 或/然后对其进行计算。问题是无论字符串是否包含字符,var 总是被定义。

例子:

输入:不是数学命令

输出:var 已定义(数学输入

我想要的:变量未定义

输入:10+10

输出:var 已定义(数学输入

我想要的:var 被定义(数学输入

输入: ABC123

输出:var 已定义(数学输入

我想要的:变量未定义

我从这个链接改编了我的代码:

如何检查 Windows 批处理文件中的参数(或变量(是否为数字

法典:

@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

Ah - 您使用的代码旨在检测所讨论的字符串是否包含数字。

您的要求似乎是检测字符串是否至少包含一个分隔符。

for/f "tokens=1*delims=^+-^*/" %%i in ("%COMMAND%"( do set "svar=%%i"&set "var=%%j">

svar设置为分隔符之前的部分,var设置为分隔符之后的部分,但它将忽略任何前导分隔符字符,并且不会反对连续的分隔符,例如abc++//++def,因为分区为tokens将主题字符串作为序列delimstoken1delimstoken2...

为了确保只有数字和算术运算符,%command%有几种方法,
我会使用findstr.exe有限的正则表达式功能。

由于%command%中的空格会干扰结果,因此我删除了它们
(减号必须用反斜杠转义,因为它表示 [类] 中的一个范围(:

:: Q:Test2017721SO_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>

最新更新