2010-02-04 15 views
6

He escrito siguiente códigocómo usar Goto en la escritura de la hornada

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 

pero va a lable "examen" a pesar de que el nivel de error no es igual a "1" PLZ me ayudan

Respuesta

6

Su problema no está pasado, es que ese nivel de error requiere un tratamiento especial, no es como una variable de entorno común. La única prueba que puede hacer con errorlevel es probar si es mayor o igual que el valor.

Así que hay que probar errorlevel valores de mayor a menor, porque si errorlevel 1 continuación if errorlevel 1 será cierto, pero if errorlevel 0 se también ser verdad

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 

si ha habilitado las extensiones de comando, y hay no hay una variable de entorno llamada ERRORLEVEL (no distingue entre mayúsculas y minúsculas). Entonces, en teoría, puede usar% ERRORLEVEL% como una variable de entorno común. Así que esto también debería funcionar

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 
0

Es posible que desee considerar el uso de ERRORLEVEL tan directo de sucursales de la siguiente manera:

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 
0

puede ser el uso || en lugar de nivel de error para la ramificación.

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

Stephan, gracias t o formateado correctamente, no por qué publicar el código en el formato apropiado. – user9133538

+0

porque no formateaste nada. Ver [aquí] (https://stackoverflow.com/editing-help) para saber cómo hacerlo. – Stephan

0

Forma más fácil de usar para el bucle.

Por/l %% a en (1,1,4) hacer (

(Tipo c: \ test.txt | encontrar “insertada” >> c: \ testloop.txt) || Ir a: hecho

)

: hecho

Echo “bucle de examen” >> c: \ examloop.txt

Ir a: EF

+0

Requiere algo de formato. – Billa

+0

@Billa: (s) él solo está leyendo cómo hacerlo ';)' – Stephan

Cuestiones relacionadas