Syntax of the command is incorrect in batch?

38,656

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...).

Share:
38,656

Related videos on Youtube

jerryh91
Author by

jerryh91

Updated on July 09, 2022

Comments

  • jerryh91
    jerryh91 almost 2 years

    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
    
    • paulsm4
      paulsm4 almost 12 years
      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?
    • PA.
      PA. almost 12 years
      welcome to the wonderful world of BAT programming and debugging. See this SO question stackoverflow.com/questions/8987208/…