как использовать goto в пакетном скрипте - PullRequest
6 голосов
/ 04 февраля 2010

Я написал следующий код

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», пожалуйста, помогите мне

Ответы [ 5 ]

6 голосов
/ 04 февраля 2010

Ваша проблема не решена, ее уровень ошибки требует особого подхода, он не похож на обычную переменную окружения.Единственный тест, который вы можете выполнить с уровнем ошибки, - это проверить, является ли он больше или равен значению.

, поэтому вам нужно проверить значения уровня ошибки от самого высокого до самого низкого, потому что если уровень ошибки 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
2 голосов
/ 04 февраля 2010

Вам необходимо перечислить уровни ошибок в порядке убывания (errorlevel2, errorlevel1, errorlevel0 ...).

См. это объяснение и пример .

0 голосов
/ 23 декабря 2017

Более простой способ использования для цикла.

Для / l %% a in (1,1,4) do (

(Введите c: \ test.txt | найти «вставлено» >> c: \ testloop.txt) || Перейти: сделано

)

: сделано

Эхо «экзаменационный цикл» >> c: \ examloop.txt

Goto: eof

0 голосов
/ 23 декабря 2017

Может использоваться || вместо уровня ошибки для ветвления.

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
0 голосов
/ 23 марта 2013

Вы можете рассмотреть возможность использования 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...