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

时间:2017-07-20 21:51:11

标签: batch-file

我一直在尝试创建一个程序,用于检测输入的字符串是否包含+, - ,*或/,然后对其进行评估。问题是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

2 个答案:

答案 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>