2012-07-06 37 views
8

cmd.exeは次のコードを実行すると、コマンドの構文が間違ったエラーを表示し続けます。どうしたの?コマンドの構文がバッチで間違っていますか?

コード:

@echo off 
setlocal enabledelayedexpansion 
CALL ant clean build compile 

REM loop thru/Run ALL .properties file names from "ExecutionSDKTest_10.2.2" folder 
:labelNextTest 
FOR %%G in (C:\ExecutionSDKTest_10.2.2\*.properties) DO (
    pause 
    Set fileName=%%~nxG 
    rem fileName==ENG-822.properties  
    set testName=!fileName:~0,7! 
    rem testName==ENG-822 
    set testNum=!fileName:~4,3! 
    REM testNum==822 
    ECHO Please Create: !testName!_Ref.properties.txt in C:\ExecutionSDKTest_10.2.2\Logs 
    echo Running:!fileName! 
    java -jar Test.jar !fileName! > Logs\!fileName!.log 

    set logPath="C:/ExecutionSDKTest_10.2.2/Logs/!fileName!.log" 
    set refLogPath="C:/ExecutionSDKTest_10.2.2/Logs/!testName!_Ref.properties.txt" 
    REM if Ref exists check Line by line 
    if EXIST !refLogPath!( 
     Call Perl TestProp1RefcheckLines.pl !fileName! !testName! 
) else (
    rem if ref does NOT exist check one important line 
    rem returns case number to check for 
    perl.exe c:\ExecutionSDKTest_10.2.2\TestProp1noRefCases.pl !testNum! 
    set lineCase=!ERRORLEVEL! 
    echo linecase is !lineCase! 

    rem set LineCase to one, two, three or four, depending on case number 
    FOR /F "tokens=*" %%B in (!logPath!) Do (
    set logLine=%%B 
rem check line >> : "...job status:..." 
if /i "!logLine:~11,33!"=="... STATUS REPORT: ...Job status:"( 
    if "!lineCase!" =="1"( 
      if /i "!logline:~32!" == "job status: job finished_error" goto labelPass 
      ) 
    if "!lineCase!"=="2" ( 
    if /i "!logLine:~32!" == "Job status: job QUEUED" goto labelPass 
      ) 
    if "!lineCase!"=="4"( 
    if /i "!logLine:~32!" == "job Execution Finished Successfully" goto labelPass 
    ) 
) else ( 
     if /i "!logLine:~11,33!"=="Error initializing the connection" goto labelPass 
    if /i "!logLine!" == "Exception in thread ""main"" java.lang.IllegalArgumentException: timeout value is negative" goto labelPass 
) 
) 
    goto labelFail 
    ) 
    ) 
pause 

REM Test Passed or Failed 
:labelFail 
echo !TestName! FAILED due to the above incorrect line 
goto labelNextTest 

:labelPass 
Echo !TestName! PASSED 
goto labelNextTest 
+2

基本的な問題は、この複雑なものをPerlスクリプトに入れたほうがよいということです。またはPowershellスクリプト、またはVBScript。あるいはAntタスクさえも。 *何でも* .batファイルです。 IMHO ... PS:あなたはバーフィングしている行を知っていますか? – paulsm4

+1

BATプログラミングとデバッグの素晴らしい世界へようこそ。この質問を参照してくださいhttp://stackoverflow.com/questions/8987208/how-do-i-make-sense-of-a-batch-file/8987977#8987977 –

答えて

11

あなたは、いくつかの重要なスペースが不足しています。これらの行では:

if EXIST !refLogPath!(

if /i "!logLine:~11,33!"=="... STATUS REPORT: ...Job status:"( 

if "!lineCase!" =="1"( 

if "!lineCase!"=="4"( 

括弧(の前に置かれた空間がなければなりません!

はい、バッチスクリプトは非常にデバッグが難しいです。しかし、実際には、のスクリプトはの方がきれいに見えます(正しくインデントされているなど)。

関連する問題