Batch file 如何在不使用ERRORLEVEL(批处理)的情况下查找文件中的某个单词

Batch file 如何在不使用ERRORLEVEL(批处理)的情况下查找文件中的某个单词,batch-file,findstr,errorlevel,Batch File,Findstr,Errorlevel,我可以使用ERRORLEVEL,但尝试了一个循环后失败了。 我正在写一批“shell” 因为我试了又试,我终于请求帮助了。 我不想使用errorlevel的原因是因为循环 (完整)外壳 @set /p build=<"C:\Users\%username%\Desktop\WellOS2\WellOS\Build".txt @title WellOS V.%build% @echo off goto boot :register cls echo You are registering..

我可以使用ERRORLEVEL,但尝试了一个循环后失败了。 我正在写一批“shell” 因为我试了又试,我终于请求帮助了。 我不想使用errorlevel的原因是因为循环

(完整)外壳

@set /p build=<"C:\Users\%username%\Desktop\WellOS2\WellOS\Build".txt
@title WellOS V.%build%
@echo off
goto boot
:register
cls
echo You are registering...
echo If this is an error press CTRL + C NOW...
pause
cls
set /p user= Enter your username: 
set /p passwordreg= Enter your password: 
mkdir "C:\Users\%username%\Desktop\WellOS2\Users\%user%"
mkdir "C:\Users\%username%\Desktop\WellOS2\Users\%user%\Documents"
echo %passwordreg% >"C:\Users\%username%\Desktop\WellOS2\Users\%user%\password".txt
echo 2 >"C:\Users\%username%\Desktop\WellOS2\OSfiles\bootset".txt
echo Your done.
pause
goto welloslog
:booterror
echo Sorry the boot file has an error. Check the user manual for BOOT$
pause
:boot
set /p boot=<"C:\Users\%username%\Desktop\WellOS2\OSfiles\bootset".txt
if %boot% == 1 goto register
if %boot% == 2 goto welloslog
goto booterror
cls
:ERROR
cls
echo ----------ERROR-------------------
echo %error%
pause
goto %back%
:welloslog
cls
echo Welcome to WellOS2!
echo ----------------LOGIN-------------
set /p user= Username: 
if exist "C:\Users\%username%\Desktop\WellOS2\Users\%user%" goto pass
set error= Sorry that account doesn't exist.
set back=welloslog
goto welloslogerror
:pass
set /p password=<"C:\Users\%username%\Desktop\WellOS2\Users\%user%\password".txt
set /p passwordlog= Password: 
if /i %passwordlog% == %password% goto wellos
set error= Sorry! wrong password.
set back= welloslog
goto error
:wellos
cls
:wellosnocls
echo --------------MAIN---------------
echo type help for help
set /p command= #: 
if exist "C:\Users\%username%\Desktop\WellOS2\Programdata\%command%.sys" set type=sys
if exist "C:\Users\%username%\Desktop\WellOS2\Programdata\%command%.pro" set type=pro
if exist "C:\Users\%username%\Desktop\WellOS2\Programdata\%command%.sys" goto po
if exist "C:\Users\%username%\Desktop\WellOS2\Programdata\%command%.pro" goto po
set error= !Unreconized program/system program!
set back=wellos
goto error
:po
set lines=0
echo --------------%command%.%type%---------------
:porep
set /a lines=%lines% + 1
set /p "code="<"C:\Users\%username%\Desktop\WellOS2\Programdata\%command%.%type%\%command%.%type%-%lines%".wellcode
if "%code%"=="GOWELL" goto wellosnocls
findstr /I /L "if" "C:\Users\%username%\Desktop\WellOS2\Programdata\%command%.%type%\%command%.%type%-%lines%.wellcode"
:skip
call %code%
goto porep
::Tools
:iftl
%code%
goto porep
@set/p build=“C:\Users\%username%\Desktop\WellOS2\Users\%user%\password”。txt
echo 2>“C:\Users\%username%\Desktop\WellOS2\OSfiles\bootset”.txt
回音你的声音完成了。
暂停
戈托韦洛斯洛酒店
:引导错误
很抱歉,启动文件有错误。检查用户手册中的引导$
暂停
:开机
设置/p启动=

除此之外,您的问题太模糊了。

以下命令返回文本文件
textfile.txt
中包含单词
word
的所有行(如果希望搜索区分大小写,请删除
/I
开关):

使用/F的
for
可以捕获输出并测试它是否为空,因为如果没有遇到匹配,循环不会迭代:

set "FOUND="
for /F "delims=" %%F in ('
    findstr /I /L "word" "textfile.txt"
') do (
    set "FOUND=Yes"
)
if defined FOUND (
    echo One or more matches found.
    rem do something...
) else (
    echo No match found.
    rem do something else...
)
在命令提示符中键入
for/?
if/?
,以获取有关所用命令的详细信息


还有一种方法可以隐式使用
ErrorLevel
,这意味着您不必通过类似
%ErrorLevel%
的方式来查询它的值!错误等级
如果ErrorLevel
,即使用条件命令分隔符时:

  • &&
    分隔符仅在前一个命令成功的情况下执行以下命令,即返回
    ErrorLevel
    0
    ;(
    findstr
    在遇到匹配时返回
    0
  • |
    分隔符仅在前一个命令失败的情况下执行以下命令,即返回
    ErrorLevel
    ,而不是
    0
    ;(
    findstr
    如果未遇到匹配项,则返回非零的
    ErrorLevel
以下代码行演示了该用法:

findstr /I /L "word" "textfile.txt" && (echo One or more matches found.) || echo (No match found.)

我没有得到第一行的
datafilename>flagfilename
部分。我不知道您的数据文件名是什么。你需要在这里替换它。您可以使用任何名称作为标记文件。这将是一个大小为0或非零的文件。为什么
ErrorLevel
不可能
find
/
findstr
(重新)如果未找到匹配项,则对其进行设置,以便在随后立即查询时给出结果;如果在循环/块中查询
ErrorLevel
,请使用并使用
!错误等级而不是
%ErrorLevel%
。。。或者检查
find
/
findstr
的输出是否(不是)空,例如,使用
for/F
对其进行解析……几乎所有运行的操作都将设置
ERRORLEVEL
,即使它只是将其设置为0表示成功。如果必须保留它,那么最好将其保存到变量中,运行命令,然后恢复它。看,我敢打赌,当您应该使用
时,您正在循环内部使用
%errorlevel%
!错误等级。您的代码有问题,但问题在哪里,类型是什么?从您的详细描述中,我的最佳答案是您的代码中一定有一个bug。如果“C:\*\*.wellcode”转到iftl
,在程序开启器中,如果找到匹配项,您想执行
转到iftl
?如果是这样,只需在转到iftl之前放置
&&
;另请参阅我的更新。。。
findstr /I /L "word" "textfile.txt"
set "FOUND="
for /F "delims=" %%F in ('
    findstr /I /L "word" "textfile.txt"
') do (
    set "FOUND=Yes"
)
if defined FOUND (
    echo One or more matches found.
    rem do something...
) else (
    echo No match found.
    rem do something else...
)
findstr /I /L "word" "textfile.txt" && (echo One or more matches found.) || echo (No match found.)