2012-08-07 21 views
14

In einem Shell-Skript, das ich den folgenden Code haben:if/then/else-Anweisungen in Windows Batch

if echo Mr.32 ; then 
    echo Success 
else 
    echo Failed 
    exit 
fi 

Was ist das Äquivalent Syntax für Windows Batch-Dateien?

+3

Können Sie uns mitteilen, was Sie bisher versucht haben? – Levon

+0

http://mevaldez.home.mchsi.com/Batch.pdf – larsks

+1

FYI: 'wenn eval echo foo' sollte' if echo foo' sein; Eval zu benutzen, hat keinen Zweck. Siehe auch http://mywiki.wooledge.org/BashFAQ/048 –

Antwort

26

Ich habe eine harte Zeit Vorstellung, wenn ECHO mit einem zurückgegebenen ERRORLEVEL ungleich 0 fehlschlagen würde. Ich nehme an, es könnte fehlschlagen, wenn die Ausgabe in eine Datei umgeleitet wurde und das Ziellaufwerk voll ist.

CptHammer hat eine gute Lösung mit ERRORLEVEL gepostet, obwohl es GOTO unnötigerweise verwendet. Es kann ohne GOTO getan werden:

ECHO Mr.32 
if errorlevel 1 (
    echo Failed 
    exit /b 
) else (
    echo Success 
) 

Es ist eine einfachere Art und Weise Aktion auf Erfolg oder Misserfolg eines Befehls zu nehmen.

command && success action || failure action 

In Ihrem Fall

ECHO Mr.32&& (
    echo Success 
) || (
    echo Failed 
    exit /b 
) 
+2

Wenn Errorlevel 1 (commandgroup1) else (commandGroup2) commandGroup1 für ANY-Returncode über 1 ausführt (dh: CommandGroup1 ist Failur und CommandGroup2 ist Success) – cptHammer

+0

"Befehl && Erfolg Aktion || Fehler Aktion" Dies ist ein sehr guter Antwort auf diese Frage. Danke für die Hilfe! –

12

Ich denke, so etwas wie dies könnte den Trick tun:

REM run the command 
ECHO Mr.32 
IF ERRORLEVEL 1 GOTO failLabel 

:successLabel 
REM put code to execute in case of success here. 
ECHO Success 
GOTO endLabel 

:failLabel 
REM put code here that should be executed in case of failure. 
ECHO Failed 

:endLabel 

Dies setzt voraus, der Befehl, den Sie (hier: echo MR.32) testen wollen, gibt bei Erfolg 0 und etwas höher bei Ausfall (ACHTUNG: Echo In den meisten Fenstern gibt das Betriebssystem nichts zurück und daher ist der tatsächliche Wert, der in diesem Skript getestet wird, wahrscheinlich der Rückkehrcode aus dem letzten Befehl, der kurz vor dem Skript ausgeführt wurde "das gibt 0 zurück, wenn eine Datei vorhanden ist und 1 andernfalls."

Es ist wahr, wie Dbenham darauf hingewiesen hat, dass diese Struktur re verwendet viel GOTO. Dies liegt daran, dass diese GOTO-Struktur die einzige ist, die in allen Windows-Versionen gut verstanden wird. Mit der Zeit erschienen kompaktere Versionen, die jedoch nur mit den neuesten Windows-Versionen funktionieren.

+0

ja echo Mr.32 gibt 0 zurück, wenn sein Erfolg voll ist, aber hier geht es in failed label ... –

+0

In den meisten Windows-Versionen gibt der Echo-Befehl nichts zurück. Wenn der letzte ausgegebene Befehl vor der Skriptausführung fehlgeschlagen ist, wird daher die fehlgeschlagene Nachricht angezeigt. Wenn andererseits der letzte Befehl, der vor diesem Skript ausgeführt wurde, erfolgreich war, erhalten Sie die Erfolgsmeldung. – cptHammer

Verwandte Themen