首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查字符串是否包含一组不工作的批处理字符。

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

Stack Overflow用户
提问于 2017-07-20 21:51:11
回答 2查看 425关注 0票数 1

我一直试图制作一个程序来检测输入的字符串是否包含+、-、*或/,然后计算它。问题是,无论字符串是否包含字符,总是定义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

代码:

代码语言:javascript
运行
复制
@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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-21 01:23:56

啊-您正在使用的代码是用来检测所讨论的字符串是否只包含数字的数字。

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

对于/f,“令牌=1*分隔符=^+-^*/”%i in (“%命令%”)设置“svar=%%i”和"var=%%j“

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

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 12:52:35

为了确保%command%中只有数字和算术运算符,有几种方法,

我会使用findstr.exe有限的正则表达式特性。

由于%command%中的空格会干扰结果,所以我删除它们

(减号必须用反斜杠转义,因为它表示类中的范围):

代码语言:javascript
运行
复制
:: 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

样本运行:

代码语言:javascript
运行
复制
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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45225802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档