批处理程序在变量中查找字符串

Sid*_*024 9 command-line batch-file command-prompt findstr

我试图在很多地方找到解决方案,但找不到具体的答案.

我正在创建一个批处理脚本.以下是我目前的代码

    @echo off
    SETLOCAL EnableDelayedExpansion
    cls
    for /f "delims=" %%a in ('rasdial EVDO cdma cdma') do set "ras=!ras! %%a"

    findstr /C:"%ras%" "already"

    if %errorlevel% == 0 
    (
        echo "it says he found the word already"
    )
    else
    (
        echo "it says he couldn't find the word already"
    )
Run Code Online (Sandbox Code Playgroud)

输出:

    FINDSTR: Cannot open already
    The syntax of the command is incorrect.
Run Code Online (Sandbox Code Playgroud)

我试图在变量'ras'中找到'已经'这个词,

问题似乎是在 findstr/C:"%ras%""已经"

我尝试使用 findstr"%ras%""已经" 但这也不起作用.

MC *_* ND 10

您的代码中存在两个问题.

第一个是如何findstr工作.对于其输入中的每一行,它检查该行是否包含(或不包含)指示的文字或正则表达式.将要测试的输入线可以从文件或从标准输入流readed,但不能从在命令行参数.它将线路输入findstr命令的最简单方法

echo %ras% | findstr /c:"already" >nul
Run Code Online (Sandbox Code Playgroud)

第二个问题是如何if编写命令.左括号必须与条件相同,else条子必须与第一个右括号else在同一行,并且else子句中的左括号必须与该子句在同一行(见此处)

if condition (
    code
) else (
    code 
)
Run Code Online (Sandbox Code Playgroud)

但是为了测试变量中字符串的存在,它更容易

if "%ras%"=="%ras:already=%" (
    echo already not found
) else (
    echo already found
)
Run Code Online (Sandbox Code Playgroud)

这将测试变量中的值是否等于相同的值,并且字符串already被替换为nothing.

有关变量编辑/替换的信息,请在此处查看.

  • 非常聪明的替换字符串技巧!我看过很多带有大量“find”和类似内容的示例,但这非常快速、干净,而且易于理解! (2认同)

Kar*_*ata 0

“命令的语法不正确。” 报告“else”,它在批处理命令行中不存在。

为了

findstr /c:"str" file
Run Code Online (Sandbox Code Playgroud)

这里str是要搜索的文字,file是要执行搜索的文件名。所以这不符合你的要求。

我认为以下内容就是您所需要的。

rasdial EVDO cdma cdma | findstr already > NUL

if %errorlevel% EQU 0 (
    echo "it says he found the word already"
)

if %errorlevel% NEQ 0 (
    echo "it says he couldn't find the word already"
)
Run Code Online (Sandbox Code Playgroud)