假设我在一个名为$ 1的变量中有一些文本。现在我想检查$ 1是否包含某个字符串。如果它包含某个字符串我想打印一条消息。印刷不是问题,问题是检查......想法怎么做?
答案 0 :(得分:20)
我认为最简单的方法是:
set YourString=This is a test
If NOT "%YourString%"=="%YourString:test=%" (
echo Yes
) else (
echo No
)
基本上':'后面的字符串是你正在寻找的字符串,而你使用的不是if if%字符串: * %将删除* 从字符串使它们不相等。
答案 1 :(得分:9)
SET搜索和替换技巧在许多情况下都有效,但它不支持区分大小写或正则表达式搜索。
如果您需要区分大小写的搜索或有限的正则表达式支持,则可以使用FINDSTR。
为了避免转义特殊字符的复杂性,最好将搜索字符串放在变量中,并且通过延迟扩展来访问搜索和目标。
您可以使用ECHO命令将$ 1管道传入FINDSTR命令。如果$ 1未定义,请使用ECHO(
,并注意不要添加额外的空格。如果未定义$ 1,则ECHO !$1!
将回显ECHO is off.
(或on),而如果未定义则ECHO(!$1!
将回显空行。
如果找到搜索字符串,FINDSTR将回显$ 1 - 您不希望这样,因此您将输出重定向到nul。如果找到搜索字符串,FINDSTR将ERRORLEVEL设置为0,如果未找到,则将其设置为1。这是用于检查是否找到字符串的内容。 &&
和||
是一种方便的语法,用于测试匹配(ERRORLEVEL 0)或不匹配(ERRORLEVEL不为0)
正则表达式支持是基本的,但仍然有用。
参见FINDSTR /?了解更多信息。
这个正则表达式示例将在字符串的开头搜索$ 1表示“BEGIN”,在中间的任何地方搜索“MID”,在结尾搜索“END”。默认情况下,搜索区分大小写。
set "search=^BEGIN.*MID.*END$"
setlocal enableDelayedExpansion
echo(!$1!|findstr /r /c:"!search!" >nul && (
echo FOUND
rem any commands can go here
) || (
echo NOT FOUND
rem any commands can go here
)
答案 2 :(得分:2)
据我所知cmd.exe没有内置函数可以直接回答你的问题。但它支持支持替换操作。所以诀窍是:在$ 1中替换你需要测试空字符串存在的子字符串,然后检查$ 1是否已经改变。如果它已经确实包含子字符串(否则替换操作首先没有任何东西可以替换!)。请参阅以下代码:
set longString=the variable contating (or not containing) some text
@rem replace xxxxxx with the string you are looking for
set tempStr=%longString:xxxxxx=%
if "%longString%"=="%tempStr%" goto notFound
echo Substring found!
goto end
:notFound
echo Substring not found
:end