批处理命令的语法不正确?

时间:2012-07-06 19:02:56

标签: syntax if-statement batch-file

当我运行以下代码时,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

1 个答案:

答案 0 :(得分:12)

你错过了一些关键的空间。在这些方面:

if EXIST !refLogPath!(

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

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

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

括号(之前必须有空格!

是的,批处理脚本很难调试。但实际上,脚本可以看起来更漂亮(正确缩进等等)。