2014-11-24 97 views
2

我是windows批处理编程的新手。如果发现特定的错误,我需要编写一个循环函数来执行任务。请参阅下面的代码。如何执行如果循环并使用批处理查找文本

我遇到了查找问题,它正在寻找Kitchen.Error.NoRepDefinied。脚本执行五次,即使找不到关键字。

请帮我确定问题,并解释这里有什么问题。任何帮助表示赞赏。我正在使用Windows Server 2012 R2。

set /a x=0 
:while1 
if %x% leq 5 (
    echo %x% 
    call abc.exe > C:\Logs\App_Error.log 
    set file=C:\Logs\App_error.log 
    set /a cnt=0 
    for /f %%a in ('type "%file%"^|find "!Kitchen.Error.NoRepDefinied!" /i /c') do set /a cnt=%%a 
     if !cnt! NEQ 0 (
      if !x! NEQ 5 (
       DEL C:\Logs\App_error.log 
      ) 
      set /a x=x+1 
      goto :while1 
     ) 
    echo "OUTSIDE LOOP" 
    echo The Status is %errorlevel% 
    call:check_file 
    exit /b %errorlevel% 
) 
+0

好菜鸟的努力。 +1在寻求帮助之前投入工作!你有没有试过'echo!cnt!'来看看为什么'!cnt! neq 0'?使用'if!cnt!有没有什么不同? gtr 0'?另外,尝试添加'echo!Kitchen.Error.NoRepDefined!'以确保该变量在循环中具有期望的值。 – rojo 2014-11-24 16:52:03

+0

要等到您的abc.exe填充并关闭日志,以便您可以正确使用它:启动“/等待abc.exe> C:\ Logs \ App_Error.log',而不是调用abc.exe> ... '在FOR循环中,'... set set/a cnt = %% a'可能会导致为零,因为'%% a'可能是一个文本。然后尝试像'... do set/a cnt = cnt + 1'。为了进行调试,请尝试'... do echo %% a' – JosefZ 2014-11-24 23:03:09

回答

1

简化代码。

循环(最多5次)调用该过程。如果进程没有返回错误级别,如果在日志文件中没有找到搜索到的字符串,则离开循环。

set "logFile=c:\logs\App_Error.log" 

    for /l %%x in (1 1 5) do (
     echo Loop %%x 
     > "%logFile%" call abc.exe 
     if not errorlevel 1 (
      find "Kitchen.Error.NoRepDefinied" "%logFile%" >nul 2>&1 || goto :endLoop 
     ) 
    ) 

:endLoop 

我不确定您试图获得的errorlevel值。

+0

感谢您的帮助。这真的很有用。我还需要代码中的帮助。有时候,我的abc.exe会因应用程序运行时未记录的数据库连接错误而失败。然后我发现我需要查找错误级别0和字符串匹配以获得成功。现在我想在代码中添加一个条件,比如查找字符串以及错误级别%ERRORLEVEL%应该等于零。如何在循环 – Karthi 2014-11-25 16:09:30

+0

@Karthi中添加第二个条件,代码已更新。我希望我能正确理解它 – 2014-11-25 18:16:23

+0

非常感谢。我做了类似的工作,但是如果使用%ERRORLEVEL%NEQ 0,我仍然没有得到我想要的预期答案。循环运行了5次,条件不满意。现在希望我已经理解了这个语法,并且将来会使用它。谢谢。但我的疑惑是为什么我无法在if条件中使用%ERRORLEVEL%,并且几乎花了几天的时间来理解这一点。非常感谢。标记为答案已被接受:) – Karthi 2014-11-25 18:35:22

相关问题