2012-03-29 90 views
1

我在Windows 2003服務器上使用調度系統,該系統需要批處理文件才能運行不同的作業。我有一個工作來檢查文件是否存在,比較文件是否爲空,然後根據結果做一些事情。每次運行這個時,返回的錯誤級別都是0,但文件不同。我期待看到1個返回。當文件不同時批處理文件比較返回0

我已驗證文件的位置,一個文件包含內容,另一個文件爲空。我設置的提示,他們他們都說%ERRORLEVEL%爲0。我甚至移動的文件是在批作業同一目錄中,但它們仍顯示爲0。

代碼:

echo %ERRORLEVEL% 
IF EXIST data.DON ( 
echo before %ERRORLEVEL% 
    FC data.DON ZERO.SEQ 
echo after %ERRORLEVEL% 
    IF %ERRORLEVEL% EQU 1 GOTO :PROCESS 
) 

輸出:

16:37:08.12 Thu 03/29/2012 
>IF EXIST data.DON (
echo before 0 
FC data.DON ZERO.SEQ 
echo after 0 
IF 0 EQU 1 GOTO :PROCESS 
) 
before 0 
Comparing files data.DON and ZERO.SEQ 
***** data.DON 
Name|Date|Location  

***** ZERO.SEQ 
***** 

after 0 

我在不同的數據文件指向同一服務器上的其他工作這個確切的代碼,和它的作品。任何想法我可以嘗試?

回答

3

如果更換的任何%變量%括號內值,該值是相同的變量本來之前,輸入括號:

set var=Old value 
(set var=New value & echo %var%) 

上一頁碼總是顯示:舊值

爲了解決這個問題,必須使用延遲擴展,即,請用感嘆號,而不是百分比的變化,並在開頭加上SETLOCAL命令:

setlocal EnableDelayedExpansion 
set var=Old value 
(set var=New value & echo !var!) 

所有前面的描述也適用於ERRORLEVEL變量,所以更換所有%errorlevel%通過您的代碼中的!errorlevel!並插入之前的SETLOCAL ...

+0

謝謝你。我最終移動了if循環之外的支票,這對我很有用。 – MikeL 2012-03-30 12:22:23

+0

當然!如果在括號外使用%errorlevel%,則此問題會消失。但要小心!如果您將同一行中的多個命令與&:上面的第一個示例結合使用,仍然存在問題,如果刪除括號,仍然會顯示「舊值」! – Aacini 2012-03-30 18:55:23

1

正確的方法來檢查errorlevel是這樣的:

IF EXIST data.DON ( 
    FC data.DON ZERO.SEQ 
    IF ERRORLEVEL 1 GOTO :PROCESS 
) 
相關問題