首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批处理文件:查找子字符串是否在字符串中(不在文件中)

批处理文件:查找子字符串是否在字符串中(不在文件中)
EN

Stack Overflow用户
提问于 2011-08-10 12:38:05
回答 9查看 434.5K关注 0票数 237

在批处理文件中,我有一个字符串abcdefg。我想检查bcd是否在字符串中。

不幸的是,似乎我找到的所有解决方案都是在文件中搜索子字符串,而不是在字符串中搜索子字符串。

有没有一个简单的解决方案?

EN

回答 9

Stack Overflow用户

发布于 2011-08-28 09:25:45

您可以通过管道将源字符串传递给findstr,并检查ERRORLEVEL的值,以查看是否找到了模式字符串。零值表示成功,并且找到了该模式。下面是一个示例:

代码语言:javascript
运行
复制
::
: Y.CMD - Test if pattern in string
: P1 - the pattern
: P2 - the string to check
::
@echo off

echo.%2 | findstr /C:"%1" 1>nul

if errorlevel 1 (
  echo. got one - pattern not found
) ELSE (
  echo. got zero - found pattern
)

当它在CMD.EXE中运行时,我们得到:

代码语言:javascript
运行
复制
C:\DemoDev>y pqrs "abc def pqr 123"
 got one - pattern not found

C:\DemoDev>y pqr "abc def pqr 123" 
 got zero - found pattern
票数 117
EN

Stack Overflow用户

发布于 2014-01-12 16:12:34

我通常这样做:

代码语言:javascript
运行
复制
Echo.%1 | findstr /C:"%2">nul && (
    REM TRUE
) || (
    REM FALSE
)

示例:

代码语言:javascript
运行
复制
Echo.Hello world | findstr /C:"world">nul && (
    Echo.TRUE
) || (
    Echo.FALSE
)

Echo.Hello world | findstr /C:"World">nul && (Echo.TRUE) || (Echo.FALSE)

输出:

代码语言:javascript
运行
复制
TRUE
FALSE

我不知道这是不是最好的方法。

票数 55
EN

Stack Overflow用户

发布于 2014-08-28 09:59:41

为了兼容性和易用性,通常最好使用FIND来实现这一点。

您还必须考虑是区分大小写还是不区分大小写。

有78分的方法(我相信我指的是paxdiablo的帖子)只会对大小写敏感地进行匹配,所以你必须对你想要匹配的每个可能的迭代的每个大小写变化分别进行检查。

)太痛苦了!只有3个字母,这意味着为了完成检查需要进行9个不同的测试!)

此外,在很多情况下,最好是匹配命令输出、循环中的变量或批处理/CMD中指针变量的值,而这不是直接的。

由于这些原因,这是一种更可取的替代方法:

用法: Find /I "Characters to Match“

/I /V

作为单行:

代码语言:javascript
运行
复制
ECHO.%Variable% | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )

多行:

代码语言:javascript
运行
复制
ECHO.%Variable%| FIND /I "ABC">Nul && ( 
  Echo.Found "ABC"
) || (
  Echo.Did not find "ABC"
)

如前所述,这对于不在允许字符串替换的变量中的东西是很好的:

代码语言:javascript
运行
复制
FOR %A IN (
  "Some long string with Spaces does not contain the expected string"
  oihu AljB
  lojkAbCk
  Something_Else
 "Going to evaluate this entire string for ABC as well!"
) DO (
  ECHO.%~A| FIND /I "ABC">Nul && (
    Echo.Found "ABC" in "%A"
  ) || ( Echo.Did not find "ABC" )
)

Output From a command:

    NLTest | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )

As you can see this is the superior way to handle the check for multiple reasons.
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7005951

复制
相关文章

相似问题

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