2012-08-07 14 views
14

in uno script di shell che ho il seguente codice:if/then/else in Windows lotto

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

Qual è la sintassi equivalente per i file batch di Windows?

+3

Puoi condividere con noi che cosa hai provato finora? – Levon

+0

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

+1

FYI: 'se eval echo foo' dovrebbe essere' if echo foo'; usando eval non serve a niente. Vedi anche http://mywiki.wooledge.org/BashFAQ/048 –

risposta

26

Sto avendo difficoltà a prevedere quando ECHO fallirebbe con un ERRORLEVEL restituito non uguale a 0. Suppongo che potrebbe fallire se l'output è stato reindirizzato su un file e l'unità di destinazione è piena.

CptHammer ha pubblicato una buona soluzione utilizzando ERRORLEVEL, sebbene usi GOTO inutilmente. Esso può essere fatto senza GOTO utilizzando:

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

C'è un modo più semplice per intervenire in caso di successo o il fallimento di qualsiasi comando.

command && success action || failure action 

Nel tuo caso

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

Se Errorlevel 1 (commandgroup1) else (commandGroup2) eseguirà commandGroup1 per QUALSIASI codice di ritorno sopra 1. (es .: CommandGroup1 Failur e CommandGroup2 è Success) – cptHammer

+0

"command && action successo || failure action" Questo è un ottimo rispondi a questa domanda Grazie per l'aiuto! –

12

penso che qualcosa di simile potrebbe fare il trucco:

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 

Questo presuppone il comando che si desidera eseguire il test (qui: echo MR.32) restituisce 0 in caso di successo e qualcosa di più alto in caso di fallimento (ATTENZIONE: Echo nella maggior parte dei sistemi operativi Windows non restituirà nulla e quindi il valore effettivo testato in questo script è probabilmente il codice di ritorno dell'ultimo comando eseguito poco prima dello script, probabilmente è meglio testare con il comando: "DIR someFile.txt "che restituirà 0 se esiste qualchefile.txt e 1 altrimenti.)

È vero come ha sottolineato Dbenham, che questa struttura re usa molto GOTO. Questo perché questa struttura GOTO è l'unica che verrà capita bene in tutte le versioni di Windows. Versioni più compatte sono apparse con il passare del tempo ma funzioneranno solo su versioni recenti di Windows.

+0

sì echo Mr.32 restituisce 0 se il suo successo è completo ma qui va in etichetta fallita ... –

+0

Nella maggior parte delle versioni di Windows, il comando Echo non restituisce nulla. pertanto, se l'ultimo comando emesso prima dell'esecuzione dello script non è riuscito, questo darà il messaggio non riuscito. d'altra parte, se l'ultimo comando eseguito prima che questo script fosse un successo, si otterrebbe il messaggio di successo. – cptHammer

Problemi correlati