检查cmd / bat脚本的字符串中是否存在子字符串

时间:2018-12-26 13:54:59

标签: batch-file cmd

我想检查count中是否存在mycountry,然后根据进行一些操作。

我的代码段:

rem @ECHO OFF
cls
SET FILE="mycountry"

如果为true,我要运行3条语句;如果为false,我要运行3条其他语句。

我尝试过这种组合:

Echo.%FILE% | findstr /C:"count">nul && (Echo.TRUE) || (Echo.FALSE)

但是,如果条件成立,如何编写多条语句? 我不想使用任何标志变量。

以下代码段无效。

Echo.%FILE% | findstr /C:"count">nul && 
(
Echo.TRUE
echo "ran correct."
) 
|| (Echo.FALSE)

2 个答案:

答案 0 :(得分:3)

您可以将%errorlevel% 值与if / else结合使用。
请参见下面的示例:

REM @echo off
cls
SET FILE="mycountry"
SET STR="TEST"

findstr %STR% %FILE% >nul
if %errorlevel% equ 1 (
    goto searchError
) else (
    goto searchSucces
)

:searchSucces
echo String %STR% found in file %FILE%
pause
exit

:searchError
echo String %STR% not found in file %FILE%
pause
exit

答案 1 :(得分:3)

您的代码(集成到批处理文件中)似乎可以正常工作:

@Echo Off

Set "FILE="

Set /P "FILE=Enter String: "

If Not Defined FILE Exit /B

Echo.%FILE% | findstr /C:"count">nul && (Echo.TRUE) || (Echo.FALSE)

Pause

此外,以下两种方法似乎都能按预期工作:

使用EchoFindStr (如您的代码一样)

@Echo Off

Set "FILE="

Set /P "FILE=Enter String: "

Echo=%FILE%|FindStr /IC:"count">Nul 2>&1&&(Echo TRUE
    Echo Ran correct.
    Timeout 3 /NoBreak>Nul
    Echo Still running!)||Echo FALSE
Pause

使用变量替换:

@Echo Off

Set "FILE="

Set /P "FILE=Enter String: "

If /I "%FILE:count=%"=="%FILE%" (Echo FALSE) Else (Echo TRUE
    Echo Ran correct.
    Timeout 3 /NoBreak>Nul
    Echo Still running!)
Pause

如果以上示例对您不起作用,则应编辑问题,以包括在实际场景中使用的实际代码和字符串。我们无法解决无法看到的问题,特别是如果您没有完全解释问题,snippet is not working仅是陈述,不是解释)