2012-03-29 136 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 
) 
相关问题