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

时间:2014-11-15 03:58:59

标签: batch-file command-line 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"
    )

输出:

    FINDSTR: Cannot open already
    The syntax of the command is incorrect.

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

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

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

3 个答案:

答案 0 :(得分:10)

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

第一个是findstr的工作原理。对于其输入中的每一行,它检查该行是否包含(或不包含)指示的文字或正则表达式。将要测试的输入行可以从文件或标准输入流中读取,但不能从命令行中的参数读取。将该行传递到findstr命令

的最简单方法
echo %ras% | findstr /c:"already" >nul

第二个问题是如何编写if命令。左括号必须与条件else子句必须与第一个右括号位于同一行,且else子句中的左括号必须在同一行中的行相同else子句(请参阅here

if condition (
    code
) else (
    code 
)

但是为了测试变量中字符串的存在,可以更容易地进行

if "%ras%"=="%ras:already=%" (
    echo already not found
) else (
    echo already found
)

这将测试变量中的值是否等于相同的值,而字符串already被替换为空。

有关变量编辑/替换的信息,请查看here

答案 1 :(得分:2)

似乎我已经找到了解决方案..

    echo %ras% | findstr "already" > nul

和@Karata我无法使用

    rasdial EVDO cdma cdma | findstr already > NUL

因为我正在编写多个案例的脚本,我想将输出存储在变量中。谢谢。反正。

答案 2 :(得分:0)

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

对于

findstr /c:"str" file

这里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"
)