我试图在很多地方找到解决方案,但无法找到具体的答案。
我正在创建批处理脚本。 以下是我目前的代码
@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%" "已" 但这也不起作用。
答案 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"
)