在批处理文件中,我有一个字符串abcdefg。我想检查bcd是否在字符串中。
不幸的是,似乎所有的解决方案,我找到搜索一个文件的子字符串,而不是一个字符串的子字符串。
有没有简单的解决方法?
在批处理文件中,我有一个字符串abcdefg。我想检查bcd是否在字符串中。
不幸的是,似乎所有的解决方案,我找到搜索一个文件的子字符串,而不是一个字符串的子字符串。
有没有简单的解决方法?
当前回答
对我来说最好的方法是:
call :findInString "HelloWorld" "World"
:findInString
ECHO.%1 | FIND /I %2>Nul && (
Echo.Found
) || (
Echo.Not found
)
其他回答
是的,你可以使用替换并检查原始字符串:
if not x%str1:bcd=%==x%str1% echo It contains bcd
%str1:bcd=%位将str1中的bcd替换为空字符串,使其与原始字符串不同。
如果原始版本中不包含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正常工作。它还可以防止某些“不适当的”开头字符。
对我来说最好的方法是:
call :findInString "HelloWorld" "World"
:findInString
ECHO.%1 | FIND /I %2>Nul && (
Echo.Found
) || (
Echo.Not found
)
在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:使用字符串作为文字搜索字符串
是的,我们可以在String中找到subString:
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
我给出这个答案可能有点晚了,但接受的答案只适用于检查“硬编码字符串”是否是搜索字符串的一部分。
对于动态搜索,你必须这样做:
SET searchString=abcd1234
SET key=cd123
CALL SET keyRemoved=%%searchString:%key%=%%
IF NOT "x%keyRemoved%"=="x%searchString%" (
ECHO Contains.
)
注意:您可以将这两个变量作为参数。