2012-07-06 39 views
0

我正在測試一些我有的小腳本。這個特別令我瘋狂。在我看來,它應該起作用,但它沒有做到我認爲它會/應該做的。這個條件(if-else)在批處理腳本中執行有什麼問題?

@echo off 
echo testing the issue 
echo. 

ECHO Checking the log file for errors... 
echo %errorlevel% 
FINDSTR /C:"open failed" C:\automatic_deployment\test1.txt 
echo %errorlevel% 
if %errorlevel% == 0 (
ECHO Deployment failed. 
pause 
GOTO quit) else (GOTO TSTErrChecking1) 

:TSTErrChecking1 
FINDSTR /C:"does not exist" C:\automatic_deployment\test1.txt 
echo %errorlevel% 
if %errorlevel% == 0 (
ECHO Deployment failed. 
pause 
GOTO quit) else (GOTO TSTErrChecking2) 

:TSTErrChecking2 
FINDSTR /C:"Logon failed" C:\automatic_deployment\test1.txt 
echo %errorlevel% 
if %errorlevel% == 0 (
ECHO Deployment failed. 
pause 
GOTO quit) else (GOTO TSTErrChecking3) 

:TSTErrChecking3 
FINDSTR /C:"Failure" C:\automatic_deployment\test1.txt 
echo %errorlevel% 
if %errorlevel% == 0 (
ECHO Deployment failed. 
pause 
GOTO quit) else (GOTO TSTErrChecking4) 

:TSTErrChecking4 
FINDSTR /C:"RC (return code) = 0" C:\automatic_deployment\test1.txt 
echo %errorlevel% 
IF %ERRORLEVEL% == 0 (
ECHO Deployment was successful. 
pause 
GOTO quit) ELSE (
ECHO Deployment failed. 
pause 
GOTO quit) 


:quit 
exit 

正如你可以看到我使用「FINDSTR」找到從一個小test1.txt文件的某些詞/串並採取相應的行動。我希望它說「部署失敗」,並且如果它看到任何「失敗」/「不存在」/「打開失敗」,則立即退出。如果它找不到以上任何一個並且發現「RC(返回碼)= 0」,我希望它說它是「成功的」。

所以,我把所有這些測試單詞和字符串放在我的test1.txt文件中,並測試了批處理腳本,但它一直跳過(我認爲)所有那些失敗的提示/單詞,並一直說它成功了。 Plz,幫忙。提前致謝。

回答

1

我只是di沒有匹配的字符串搜索。我不知道FINDSTR在搜索和比較時尋找完全相同的大寫字母。這是問題所在。

1

這可能是因爲你已經在你的環境中定義的%ERRORLEVEL%變量

Raymond Chen的ERRORLEVEL%ERRORLEVEL%http://blogs.msdn.com/b/oldnewthing/archive/2008/09/26/8965755.aspx

,然後嘗試

FINDSTR /C:"RC (return code) = 0" test.txt 
IF ERRORLEVEL 1 ECHO Deployment failed. 
+0

@ PA.-感謝您的領導:)然而,我測試了我的所作所爲,並且工作。我只是沒有匹配的字符串來搜索。我不知道FINDSTR在搜索和比較時尋找完全相同的大寫字母。這是問題所在。 – duper 2012-07-11 14:37:08