我写了以下代码
setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
if %ERRORLEVEL% EQU 0 goto test
if %ERRORLEVEL% EQU 1 goto exam
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
endlocal
但即使错误级别不等于“1”,它也会标记为“考试”.PLZ帮帮我
答案 0 :(得分:6)
你的问题不是goto,它的错误级别需要特殊处理,它不像普通的环境变量。您可以使用errorlevel进行的唯一测试是测试它是否大于或等于value。
所以你必须测试从最高到最低的errorlevel值,因为如果errorlevel 1
然后if errorlevel 1
将为真,但if errorlevel 0
也为真
setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
if errorlevel 1 goto exam
if errorlevel 0 goto test
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
endlocal
如果启用了命令扩展,并且没有名为ERRORLEVEL的环境变量(不区分大小写)。那么从理论上讲,你可以像普通的环境变量一样使用%ERRORLEVEL%。所以这也应该有用
setlocal EnableExtensions
set /A sample =1
:first
type C:\test.txt | find "inserted"
if %errorlevel% EQU 1 goto exam
if %errorlevel% EQU 0 goto test
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
答案 1 :(得分:2)
您需要按降序列出错误级别(errorlevel2,errorlevel1,errorlevel0 ...)。
答案 2 :(得分:0)
您可能需要考虑使用ERRORLEVEL
作为直接分支,如下所示:
setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
**goto :Branch%ERRORLEVEL%**
:Branch0
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:Branch1
echo "exam loop" >> C:\examloop.txt
endlocal
答案 3 :(得分:0)
可以使用||
而不是errorlevel进行分支。
setlocal
set /a sample=1
:first
(Type c:\test.txt | find "inserted" >> c:\testloop.txt) || goto :branch1
set /a sample+=1
If %sample% leq 4 goto :first
:brabch1
Echo "exam loop" >> c:\examloop.txt
答案 4 :(得分:0)
更简单的循环使用方法。
对于/ l %% a in(1,1,4)do(
(输入c:\ test.txt | find“inserted”>> c:\ testloop.txt)||转到:完成
)
:完成
回声“考试循环”>> C:\ examloop.txt
转到:eof