2014-11-24 7 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

相關問題