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?
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?
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
)
Se Errorlevel 1 (commandgroup1) else (commandGroup2) eseguirà commandGroup1 per QUALSIASI codice di ritorno sopra 1. (es .: CommandGroup1 Failur e CommandGroup2 è Success) – cptHammer
"command && action successo || failure action" Questo è un ottimo rispondi a questa domanda Grazie per l'aiuto! –
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.
sì echo Mr.32 restituisce 0 se il suo successo è completo ma qui va in etichetta fallita ... –
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
Puoi condividere con noi che cosa hai provato finora? – Levon
http://mevaldez.home.mchsi.com/Batch.pdf – larsks
FYI: 'se eval echo foo' dovrebbe essere' if echo foo'; usando eval non serve a niente. Vedi anche http://mywiki.wooledge.org/BashFAQ/048 –