2010-06-21 144 views
6

以下代碼始終顯示0作爲錯誤級別,但是當複製命令在for循環命令之外完成時,它會返回非零錯誤級別。通過批處理循環執行命令的錯誤級別

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

是否可以獲得for循環執行的複製命令的錯誤級別?

回答

1

我假設你正在將文件從一個目錄複製到另一個目錄?如果是這樣,你可以做這樣的事情,而不是:

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

延遲擴展需要得到循環,而不是裏面的值ERRORLEVEL的實際值在進入循環之前。

如果這不是你想要做的,請澄清你的目標。

+0

我試圖解析爲一個可執行輸出(副本只是一個簡單的例子)以下的批處理文件,但我想知道這是否可執行返回一個錯誤。 – Josh 2010-06-21 23:06:53

+0

好的。我不確定你是否可以獲得由for循環執行的命令的錯誤級別,而不用像我的例子那樣分離它們,也許別人可以提供更好的答案。 – WildCrustacean 2010-06-22 13:15:05

4

它適合我!您只需將包含複製命令的文本文件(7200行;例如: 複製2_97691_Scan.pdf O:\ Data \ Dev \ Mins \ PDFScan2 \ 2011 \ 4 \ 2_97691_Scan)放入DO括號 中進行錯誤檢查。 PDF), 我可以運行

@echo off 

setlocal EnableDelayedExpansion 

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

這裏的重要一點是'EnableDelayedExpansion' – 2012-07-27 16:30:08

+0

謝謝 - 它爲我工作! – 2014-12-04 23:35:31

+1

警告:根據原始問題,這是一個FOR/F' *文件*循環的解決方案,而不是'FOR/F' *命令*循環。請參閱:[「FOR/F命令循環中的ERRORLEVEL返回意外的結果」](http://stackoverflow.com/questions/38515054/errorlevel-in-for-f-command-loop-with-en- delayedexpansion-返回-unexpected) – 2016-07-21 23:25:11

相關問題