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

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

有没有简单的解决方法?


当前回答

更好的答案是:

set "i=hello " world"
set i|find """" >nul && echo contains || echo not_contains

其他回答

ECHO %String%| FINDSTR /C:"%Substring%" && (Instructions)

为了兼容性和易用性,通常最好使用FIND来执行此操作。

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

78点的方法(我相信我指的是paxdiablo的帖子)只会匹配大小写敏感,所以你必须为你想要匹配的每个可能迭代的每个大小写变化单独检查。

)真痛苦!只有3个字母,这意味着要完成9个不同的测试!)

此外,很多时候匹配命令输出、循环中的变量或批处理/CMD中指针变量的值更可取。

由于这些原因,这是一个更好的替代方法:

使用方法:查找[/I] [/V] " character to Match"

[/I](不区分大小写) [/V](不能包含字符)

作为单线:

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

多行:

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

如上所述,这对于变量中不允许字符串替换的东西非常有用:

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.

如果你正在检测存在感,这里有一个最简单的解决方案:

SET STRING=F00BAH
SET SUBSTRING=F00
ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE TRUE) else (ECHO CASE FALSE)

这对于将windows命令的输出放到布尔变量中非常有用。只需将echo替换为您想要运行的命令。您还可以使用管道将Findstr串在一起以进一步限定语句。例如,用于业务控制(SC.exe)

SC QUERY WUAUSERV | findstr /C:"STATE" | FINDSTR /C:"RUNNING" & IF ERRORLEVEL 1 (ECHO case True) else (ECHO CASE FALSE)

这一个评估SC查询输出的windows更新服务作为一个多行文本,找到包含“状态”的行,然后发现单词“running”是否出现在该行,并相应地设置错误级别。

在Var中查找文本,示例:

var_text="demo string test"
Echo.%var_text% | findstr /C:"test">nul && (
    echo "found test" 
    ) || Echo.%var_text% | findstr /C:"String">nul && (
             echo "found String with S uppercase letter" 
    ) || (
             echo "Not Found " 
    )

传说:

& Execute_that和execute_this || Ex: Execute_that IF_FAIL execute this && Ex: Execute_that IF_SUCCESSFUL执行此操作 >nul命令无回显结果 中 /C:使用字符串作为文字搜索字符串

建立在@user839791的答案上,但我又添加了一些东西。

@echo off
rem --Set variable below--
set var=condition

rem --Uncomment below line to display contents of variable--
::echo The variable is %var%

rem --Change condition to desired string below--
ECHO.%var%| FIND /I "condition">Nul && (  
  rem --Occurs if the string is found--
  Echo.Variable is "condition"
  color C
  pause
) || (
  rem --Occurs if the string isn't found--
  Echo.Variable is not "condition"
  color A
  pause
)