Windows Batch如果阻止语法

Cri*_*ian 0 windows file batch-file

我真的找不到这个脚本的语法有什么问题

if块有问题,但我看不出是什么问题.

@ECHO off

set PROJECT=C:/ws/UI/Trunky/plugins/.
set EXE=grails
set MVN=mvn
set DEP=--refresh-dependencies
set CLEAN=clean
set ASSET=ProcessAssets -Dgrails.env=production -DRESOURCE_PATH=./assets
set TEST=test-app unit: --non-interactive
set FIXJS=-s ./hudson-config/settings.xml package
set INPUT="%1"

IF "%1" == "-dep"(
    ECHO %EXE% %DEP%
    ECHO "Refreshing dependencies."
) IF "%1" == "-clean"(
    ECHO %EXE% %CLEAN%
    ECHO "Cleaning up."
)IF "%1" == "-asset"(
    ECHO %EXE% %ASSET%
    ECHO "Processing assets."
)IF "%1" == "-test"(
    ECHO %EXE% %TEST%
    ECHO "Running Groovy tests."
)IF "%1" == "-fixjs"(
    ECHO %MVN% %FIXJS%
    ECHO "Copying JS, Running Jasmine and performing coverage report."
)IF "%1" == "-lazy"(
     ECHO rmdir /s /q "%PROJECT%"
     ECHO %EXE% %DEP%
     ECHO %EXE% %CLEAN%
     ECHO %EXE% %ASSET%
     ECHO %MVN% %FIXJS%
)

ECHO "Done. Have a great day!"
Run Code Online (Sandbox Code Playgroud)

jam*_*mes 7

'在自己的行上启动每个IF,在左括号前留一个空格.

上面解决问题的原因是.cmd文件每行需要一个命令,右括号"结束"该语句.因此,在右括号后面的附加IF在同一行上开始另一个意外的命令.

构造

if "%1" == "somestring" (
echo "%1"
)
Run Code Online (Sandbox Code Playgroud)

被有效地解释为一行,右括号和回车结束行和'if'.

这使得一个"棘手的"'if'构造

if "%1" == "somestring" (
echo "%1"
) else (
echo "Not %1"
)
Run Code Online (Sandbox Code Playgroud)

由于'else'是'if'语法的一部分,'else'必须与右括号包含在同一行,以"继续"'if'语句.

在左括号之前需要空格作为简单的语法要求.