2012-08-07 22 views
14

en un script de shell Tengo el siguiente código:if/then/else declaraciones en serie de Windows

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

¿Cuál es la sintaxis equivalente para archivos por lotes de Windows?

+3

¿Puede compartir con nosotros lo ha intentado hasta ahora? – Levon

+0

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

+1

FYI: 'if eval echo foo' debe ser' if echo foo'; usar eval no sirve para nada. Consulte también http://mywiki.wooledge.org/BashFAQ/048 –

Respuesta

26

Me está costando imaginar cuándo ECHO fallaría con un ERRORLEVEL devuelto no igual a 0. Supongo que podría fallar si la salida se redirigió a un archivo y la unidad de destino está llena.

CptHammer ha publicado una buena solución utilizando ERRORLEVEL, aunque utiliza GOTO innecesariamente. Se puede hacer sin GOTO usando:

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

Existe una manera más sencilla de tomar medidas en el éxito o el fracaso de cualquier comando.

command && success action || failure action 

En su caso

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

Si Errorlevel 1 (commandgroup1) else (commandGroup2) ejecutará commandGroup1 para CUALQUIER código de retorno por encima de 1. (es decir: CommandGroup1 es Failur y CommandGroup2 es correcto) – cptHammer

+0

"comando && success action || failure action" Esto es muy bueno responde a esta pregunta ¡Gracias por la ayuda! –

12

creo que algo como esto podría hacer el truco:

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 

Esto supone que el comando que desea probar (en este caso: echo MR.32) devuelve 0 en caso de éxito y nada más alto en caso de fallo (CUIDADO: Echo en la mayoría de las ventanas, el sistema operativo no devolverá nada y, por lo tanto, el valor real que se prueba en este script es probablemente el código de retorno del último comando ejecutado justo antes del script. Probablemente sea mejor que pruebe con el comando: "DIR someFile.txt "que devolverá 0 si existe algún archivo.txt y 1 en caso contrario")

Es cierto como dbenham señaló que esta estructura re usa mucho de GOTO. Esto se debe a que esta estructura GOTO es la única que se entenderá bien en todas las versiones de Windows. Versiones más compactas aparecieron con el tiempo, pero solo funcionarán en versiones recientes de Windows.

+0

yes echo Mr.32 devuelve 0 si su éxito está completo pero aquí va en la etiqueta fallida ... –

+0

En la mayoría de las versiones de Windows, el comando Echo no devuelve nada. por lo tanto, si el último comando emitido antes de la ejecución del script falló, esto dará el mensaje fallido. por otro lado, si el último comando ejecutado antes de este script fue un éxito, obtendría el mensaje de éxito. – cptHammer