Josh
Josh

Reputation: 71

Errorlevel of command executed by batch for loop

The following code always displays 0 as the errorlevel, but when the copy command is done outside of the for loop command it returns a non zero errorlevel.

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

Is is possible to get the errorlevel of the copy command executed by the for loop?

Upvotes: 7

Views: 7947

Answers (2)

Gepi
Gepi

Reputation: 59

it works for me ! You only need to put the error checking within the DO parentheses with a text file containing the copy commands (7200 lines; for example: copy 2_97691_Scan.pdf O:\Data\Dev\Mins\PDFScan2\2011\4\2_97691_Scan.pdf), I can run the following batch file

@echo off

setlocal EnableDelayedExpansion

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

Upvotes: 5

WildCrustacean
WildCrustacean

Reputation: 5966

I am assuming that you are copying files from one directory to another? If so, you could do something like this instead:

@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%

The delayed expansion is required to get the actual value of errorlevel inside the loop instead of the value before the loop is entered.

If that isn't what you are trying to do, please clarify your objective.

Upvotes: 1

Related Questions