查找命令如果不能正常工作

时间:2013-09-19 23:22:38

标签: windows if-statement batch-file find

嗨,这是我的模块名为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 \ LOGS \ logfilename.txt:0

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

我做错了什么? $ errorlevel%不是正确的检查对象吗? 我试过了两个!错误级别!和%errorlevel%..我得到相同的结果

2 个答案:

答案 0 :(得分: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 

适合我!

答案 1 :(得分:0)

这也会给你一个改变的错误级别(找到时为0,不是时为1)

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

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