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

标签 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%”“已经”
但这也不起作用。

最佳答案

您的代码中有两个问题。

第一个是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

关于batch-file - 批处理程序在变量中查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942374/

相关文章:

powershell - 在批处理而不是PowerShell中执行相同的任务:迭代所有用户并找到%temp%文件夹以删除其中的文件

c++ - 启动 vcvarsall.bat 后从 ant 执行 msbuild

command-line - tf.exe "you are not authorized to access",不接受我的登录参数

python - 从 IPython 控制台复制代码,使用标准 Python 提示符自动重新格式化

windows - 如何强制删除文件?

java - 什么时候在 JDBC 上使用批处理操作更快?

linux - VMWare Player 6 启动命令行

asp.net - .Net Core App - 命令行格式异常

linux - 在 BASH 提示符中显示环境变量

Java:运行多个 shell 命令?