2010-06-21 15 views
6

El siguiente código siempre muestra 0 como el nivel de error, pero cuando el comando de copia se realiza fuera del comando for loop devuelve un nivel de error distinto de cero.Nivel de error del comando ejecutado por lote para el bucle

for /f "usebackq delims=" %%x in (`copy x y`) do (
    set VAR=%%x 
) 
ECHO Errorlevel = %ERRORLEVEL% 
ECHO VAR = %VAR% 

¿Es posible obtener el nivel de error del comando de copia ejecutado por el ciclo for?

Respuesta

1

Supongo que está copiando archivos de un directorio a otro? Si es así, usted podría hacer algo como esto en su lugar:

@echo off 

setlocal EnableDelayedExpansion 

set ERR=0 

for %%x in (x) do (

    copy %%x y 
    set ERR=!errorlevel! 

    set VAR=%%x 
) 
ECHO Errorlevel = %ERR% 
ECHO VAR = %VAR% 

se requiere la expansión retardada para obtener el valor real del nivel de error dentro del bucle en lugar del valor antes de entrar en el bucle.

Si eso no es lo que está tratando de hacer, aclare su objetivo.

+0

estoy tratando de analizar la salida de un archivo ejecutable (la copia es sólo un ejemplo sencillo), pero me gustaría saber si ese ejecutable devuelve un error. – Josh

+0

Ok. No estoy seguro si puede obtener el nivel de error para el comando ejecutado por el bucle for sin separarlos como en mi ejemplo, tal vez alguien más pueda proporcionar una mejor respuesta. – WildCrustacean

4

¡me funciona! Solo necesita colocar la comprobación de errores dentro de DO entre paréntesis con un archivo de texto que contiene los comandos de copia (7200 líneas, por ejemplo: copia 2_97691_Scan.pdf O: \ Data \ Dev \ Mins \ PDFScan2 \ 2011 \ 4 \ 2_97691_Scan. pdf), que puede ejecutar el siguiente archivo por lotes

@echo off 

setlocal EnableDelayedExpansion 

for /F "delims=" %%I in (CopyCurrentPDFs.txt) do (
%%I 
if !errorlevel! NEQ 0 echo %%I>>errorcopy.txt 
) 
+1

Lo importante aquí es 'EnableDelayedExpansion' –

+0

¡Gracias, funcionó para mí! –

+1

Advertencia: esta es una solución para un bucle 'FOR/F' * file *, no un bucle' FOR/F' * command * según la pregunta original. Ver: ["ERRORLEVEL en FOR/F Command Loop devuelve resultado inesperado"] (http://stackoverflow.com/questions/38515054/errorlevel-in-for-f-command-loop-with-enabledelayedexpansion-returns-unexpected) –

Cuestiones relacionadas