2012-07-06 15 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

मूल समस्या यह है कि आप इस जटिल को पर्ल स्क्रिप्ट में डालने से बेहतर हैं। या एक पावरहेल स्क्रिप्ट, या एक वीबीस्क्रिप्ट। या यहां तक ​​कि एक चींटी कार्य। * कुछ भी * लेकिन एक .bat फ़ाइल। आईएमएचओ ... पीएस: क्या आपको पता है कि यह किस लाइन पर बार्फ़िंग कर रहा है? – paulsm4

+1

बीएटी प्रोग्रामिंग और डिबगिंग की अद्भुत दुनिया में आपका स्वागत है। यह SO प्रश्न देखें 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"( 

एक अंतरिक्ष कोष्टक ( के समक्ष रखा वहाँ होना चाहिए!

हां, बैच स्क्रिप्ट को डीबग करना बहुत मुश्किल है। लेकिन वास्तव में, स्क्रिप्ट सुंदर दिखने वाला (ठीक से इंडेंट, आदि ...) देख सकता है।

संबंधित मुद्दे