9

The cmd.exe keeps giving me a The syntax of the command is incorrect error when I run the following codes. Whats wrong with it?

code:

 @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
jerryh91
  • 1,777
  • 10
  • 46
  • 77
  • 2
    The basic problem is that you're better off putting something this complex in a Perl script. Or a Powershell script, or a VBScript. Or even an Ant task. *Anything* but a .bat file. IMHO... PS: Do you have any idea what line it's barfing on? – paulsm4 Jul 06 '12 at 19:11
  • 1
    welcome to the wonderful world of BAT programming and debugging. See this SO question http://stackoverflow.com/questions/8987208/how-do-i-make-sense-of-a-batch-file/8987977#8987977 – PA. Jul 06 '12 at 19:16

1 Answers1

14

You're missing a few crucial spaces. In these lines:

if EXIST !refLogPath!(

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

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

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

there must be a space placed before the parenthesis ( !

Yes, batch scripts are very hard to debug. But really, the script could look prettier (indented properly, etc...).

Eitan T
  • 32,660
  • 14
  • 72
  • 109