2010-02-04 4 views
6

ich geschrieben habe folgenden Codewie gehe in Batch-Skript verwenden

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 

aber es wird lable „Prüfung“, obwohl Fehlerebene nicht gleich „1“ plz help me

Antwort

6

Ihr Problem ist nicht, seine Errorlevel erfordert spezielle Behandlung, es ist nicht wie eine gewöhnliche Umgebungsvariable. Der einzige Test, den Sie mit errorlevel durchführen können, besteht darin, zu testen, ob er größer oder gleich dem Wert ist.

so haben Sie Error Werte vom höchsten zum niedrigsten zu testen, denn wenn Errorlevel 1 dann if errorlevel 1 wahr sein, aber if errorlevel 0 wird auch wahr sein

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 

, wenn Sie Befehlserweiterungen aktiviert haben, und es ist keine Umgebungsvariable namens ERRORLEVEL (case insensitive). Dann können Sie% ERRORLEVEL% theoretisch wie eine gewöhnliche Umgebungsvariable verwenden. So sollte dies auch

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

arbeiten Sie möchten mit ERRORLEVEL als direkte Verzweigung prüfen, wie folgt:

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

Nutzen sein können || statt Errorlevel für die Verzweigung.

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 dank t: \ examloop.txt

Goto:

Echo „-Prüfung loop“ >> c getan o richtig formatiert, warum nicht Code falsch formatieren. – user9133538

+0

weil Sie nichts formatiert haben. Sehen Sie [hier] (https://stackoverflow.com/editing-help), wie es geht. – Stephan

0

Einfachere Art und Weise für die Schleife zu verwenden.

Für/l %% a in (1,1,4) tun (

(Typ c: \ test.txt | finden „eingefügt“ >> c: \ testloop.txt) || goto: getan

)

: eof

+0

Erfordert einige Formatierungen. – Billa

+0

@Billa: (s) er liest gerade wie es geht ';)' – Stephan

Verwandte Themen