在批处理文件中,我有一个字符串abcdefg
。我想检查字符串中是否有bcd
。
不幸的是,似乎我找到的所有解决方案都是为子字符串搜索文件,而不是子字符串的字符串。
有一个简单的解决方案吗?
答案 0 :(得分:255)
是的,您可以使用替换并检查原始字符串:
if not x%str1:bcd=%==x%str1% echo It contains bcd
%str1:bcd=%
位会将bcd
中的str1
替换为空字符串,使其与原始字符串不同。
如果原件中没有包含bcd
字符串,则修改后的版本将完全相同。
使用以下脚本进行测试将显示其实际效果:
@setlocal enableextensions enabledelayedexpansion
@echo off
set str1=%1
if not x%str1:bcd=%==x%str1% echo It contains bcd
endlocal
各种运行的结果:
c:\testarea> testprog hello
c:\testarea> testprog abcdef
It contains bcd
c:\testarea> testprog bcd
It contains bcd
几点说明:
if
声明是此解决方案的核心,其他一切都是支持。x
是为了确保字符串bcd
正常工作。它还可以防止某些“不正当”的起始角色。答案 1 :(得分:100)
您可以将源字符串传递给findstr
并检查ERRORLEVEL
的值以查看是否找到了模式字符串。值为零表示成功并且找到了模式。这是一个例子:
::
: 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中运行时,我们得到:
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
答案 2 :(得分:41)
我通常做这样的事情:
Echo.%1 | findstr /C:"%2">nul && (
REM TRUE
) || (
REM FALSE
)
示例:
Echo.Hello world | findstr /C:"world">nul && (
Echo.TRUE
) || (
Echo.FALSE
)
Echo.Hello world | findstr /C:"World">nul && (Echo.TRUE) || (Echo.FALSE)
输出:
TRUE
FALSE
我不知道这是不是最好的方式。
答案 3 :(得分:17)
为了兼容性和易用性,通常最好使用FIND来执行此操作。
您还必须考虑是否要区分大小写或不区分大小写。
78分的方法(我相信我指的是paxdiablo的帖子)只会匹配Case Sensitively,所以你必须为你想要匹配的每个可能的迭代单独检查每个案例变体。
(多么痛苦!只有3个字母,意味着9个不同的测试才能完成检查!)
此外,很多时候最好匹配命令输出,循环中的变量或批处理/ CMD中指针变量的值,这不是那么简单。
由于这些原因,这是一种更好的替代方法:
使用:查找[/ I] [/ V]“要匹配的字符”
[/ 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 (oihu AljB lojkAbCk) DO ( ECHO.%~A| FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" ) )
从命令输出:
NLTest | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
正如您所看到的,这是处理检查的最佳方式,原因有多种。
答案 4 :(得分:9)
如果您正在检测是否存在,这是最简单的解决方案:
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"发生在该行上,并相应地设置errorlevel。
答案 5 :(得分:3)
要在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 ||
例如:Execute_IF_FAIL执行此操作&&
例如:Execute_IF_SUCCESSFUL执行此操作>nul
无命令回显结果/C:
使用字符串作为文字搜索字符串答案 6 :(得分:1)
更好的答案是here:
set "i=hello " world"
set i|find """" >nul && echo contains || echo not_contains
答案 7 :(得分:1)
我可能对这个答案来得太晚了,但是被接受的答案仅适用于检查“硬编码字符串”是否是搜索字符串的一部分。
对于动态搜索,您必须这样做:
SET searchString=abcd1234
SET key=cd123
CALL SET keyRemoved=%%searchString:%key%=%%
IF NOT "x%keyRemoved%"=="x%searchString%" (
ECHO Contains.
)
注意:您可以将两个变量用作参数。
答案 8 :(得分:1)
在文件中搜索子字符串的解决方案也可以搜索字符串,例如。 find
或findstr
。
对于您来说,简单的解决方案是将字符串传递到命令中,而不是提供文件名。
区分大小写的字符串:
echo "abcdefg" | find "bcd"
忽略字符串的大小写:
echo "abcdefg" | find /I "bcd"
如果未找到匹配项,您将在CMD上得到一个空行响应,并且%ERRORLEVEL%设置为1
答案 9 :(得分:0)
all('#id-of-select option')[1].select_option
答案 10 :(得分:0)
我在计算机上安装了 python ,在新的 python 文件中输入以下内容:
fullstring = "abcdefg"
substring = "bcd"
if substring in fullstring:
print "It contains bcd"
else:
print "It doesn't contains bcd"
在批处理中,写存储的位置,在我的情况下:
"%CD%\find.py"
答案 11 :(得分:0)
基于 @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
)
答案 12 :(得分:0)
是的,我们可以在字符串中找到子字符串:
echo.%data% | FINDSTR /I "POS">Nul && (SET var=POS) || (SET noVar="variable not found")
echo.%data% | FINDSTR /I "TD1">Nul && (SET var=TD1) || (SET noVar="variable not found")
GOTO %var%
:POS
echo processes inside POS
GOTO END
:TD1
echo processes inside TD1
:END