2

我在需要批处理文件来运行不同作业的 Windows 2003 服务器上使用调度系统。我有一项工作是检查文件是否存在,比较文件是否为空,然后根据结果执行某些操作。每次我运行它,返回的错误级别都是 0,但是文件不同。我期待看到 1 返回。

我已经验证了文件的位置,一个文件有内容,另一个是空的。我已经设置了提示,他们都说 %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

我在同一台服务器上的其他作业中有这个确切的代码,指向不同的数据文件,它可以工作。关于我可以尝试什么的任何想法?

4

2 回答 2

5

如果您替换括号内的任何 %variable% 的值,则该值与输入括号之前的变量相同:

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

以前的代码总是显示:旧值

要解决这个问题,您必须使用延迟扩展,即用感叹号而不是百分比将变量括起来并SETLOCAL在开头添加一个命令:

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

所有前面的描述也适用于 errorlevel 变量,所以在你的代码中替换 all%errorlevel%!errorlevel!插入前面的SETLOCAL ....

于 2012-03-30T01:20:53.160 回答
1

正确的检查方法errorlevel是这样的:

IF EXIST data.DON ( 
    FC data.DON ZERO.SEQ
    IF ERRORLEVEL 1 GOTO :PROCESS
)
于 2012-03-29T21:01:15.680 回答