0

嗨,这是我来自名为 extract 的模块的代码日志文件是我从同一脚本中的另一个函数生成的文件,调用 extract 函数..

 : extract 
  find /c "extract return code: 0" c:\hp\logs\!logfile!
 SETLOCAL EnableDelayedExpansion 
 echo errorleve with percent %errorlevel%
 echo errorleve with dxcalim  !errorlevel!
 if !errorlevel! NEQ 0 (    
     echo do something 
  ) else (
 echo do nothing 
 ) 

)

好的,可以说我的日志文件有以下条目

  extract return code: 0

结果如下:

 ---------- C:\HP\LOGS\logfilename: 1
 errorleve with percent 0
 errorleve with dxcalim  0
 do something
 Press any key to continue . . .

如果我的日志文件有以下条目

  extract return code: 1

结果如下:

 ---------- C:\HP\LOGS\logfilename.txt: 0
 errorleve with percent 0
 errorleve with dxcalim  0
 do something
 Press any key to continue . . .

如您所见,行结果不同但错误级别保持不变 ---------- C:\HP\LOGS\logfilename: 1 ---------- C:\HP\日志\logfilename.txt:0

所以我的 if 和 else 语句没有正确选择错误级别?此代码在此脚本之外运行良好;这就是为什么我很困惑。如果我对文本文件运行相同的代码,它可以正常工作,但是当我将它变成一个函数并在另一个脚本中调用它时,它会崩溃吗?

我究竟做错了什么?$errorlevel% 不是要检查的正确内容吗?我都试过了!errorlevel!和 %errorlevel% .. 我得到相同的结果

4

2 回答 2

0

SETLOCAL正在清算errorlevel

尝试移动SETLOCAL EnableDelayedExpansion.find


附录:实际测试批次和结果

@ECHO OFF
SETLOCAL
>q18906531.txt ECHO extract return code: 0
CALL :test
>q18906531.txt ECHO extract return code: 1
CALL :test
GOTO :eof

:test
SETLOCAL EnableDelayedExpansion 
find /c "extract return code: 0" q18906531.txt
echo errorleve with percent %errorlevel%
echo errorleve with dxcalim  !errorlevel!
if !errorlevel! NEQ 0 (    
    echo do something 
 ) else (
echo do nothing 
) 
endlocal
GOTO :EOF

结果:

---------- Q18906531.TXT: 1
errorleve with percent 0
errorleve with dxcalim  0
do nothing 

---------- Q18906531.TXT: 0
errorleve with percent 1
errorleve with dxcalim  1
do something 

为我工作!

于 2013-09-20T00:20:12.613 回答
0

这也将为您提供不断变化的错误级别(找到时为 0,未找到时为 1)

find "extract return code: 0" < "c:\hp\logs\!logfile!" >nul

请注意,其他命令会更改错误级别,因此请在使用其他命令之前对其进行测试(或保存)。

于 2013-09-20T01:34:45.843 回答