2012-04-27 14 views
20

digamos que queremos crear un archivo vacío en las ventanas con el siguiente comando:de archivos en Windows y% errorlevel%

type nul > C:\does\not\exist\file.txt 

no existe el directorio, por lo que tenemos el error:

The system cannot find the path specified 

Si imprime el %errorlevel% la salida es:

echo %errorlevel% 
0 

sin embargo, la orden no era suc ¡Culpable!

me di cuenta, de que las ventanas no establece el %errorlevel% del último comando si se usa la redirección ..

¿Hay alguna forma de evitar esto?

Respuesta

27

Usted puede utilizar el siguiente:

C:\>type nul > C:\does\not\exist\file.txt && echo ok || echo fail 
The system cannot find the path specified. 
fail 

C:\>echo %errorlevel% 
1 

siempre asumí la & & y || los operadores usaban ERRORLEVEL, pero aparentemente no.

Es muy curioso que ERRORLEVEL se establezca después del error de redirección solo si usa || operador. Nunca lo hubiera adivinado. Tampoco me hubiera molestado en probar si no fuera por su excelente pregunta.

Si todo lo que quiero hacer es establecer el ERRORLEVEL en caso de fallo de redirección, entonces, por supuesto, sólo tiene que hacer:

type nul > C:\does\not\exist\file.txt || rem 
+1

@AndriyM - ¿Seguro ERRORLEVEL de 0 antes de empezar la prueba? '&& REM' no" arregla "ERRORLEVEL en XP ni en Vista. – dbenham

+0

Tienes razón, fue el '1' establecido después de la prueba con' || '. Después de tu comentario volví a verificar y fue '0'. Gracias por corregirme. –

+0

Un comportamiento realmente inesperado, pero tal vez el errorlevel se establece por la salida del comando después de establecer por las redirecciones – jeb

Cuestiones relacionadas