如何在批处理脚本中使用goto

时间:2010-02-04 07:08:24

标签: batch-file

我写了以下代码

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帮帮我

5 个答案:

答案 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 ...)。

请参阅this explanation and example

答案 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