1

このスクリプトの構文の問題点が本当にわかりません

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!"
4

2 に答える 2

7

'各 IF はそれぞれの行で開始し、左括弧の前にスペースを残します。

上記で問題が修正される理由は、.cmd ファイルでは 1 行に 1 つのコマンドが必要であり、閉じ括弧によってステートメントが「終了」するためです。したがって、閉じ括弧の後に続く追加の IF は、同じ行で別の予期しないコマンドを開始します。

コンストラクト

if "%1" == "somestring" (
echo "%1"
)

は実質的に 1 行として解釈され、閉じ括弧とキャリッジ リターンが行の終わりと 'if' で終わります。

これにより、1 つの「トリッキーな」「if」構文が作成されます

if "%1" == "somestring" (
echo "%1"
) else (
echo "Not %1"
)

'else' は 'if' 構文の一部であるため、'else' を閉じ括弧と同じ行に含めて、'if' ステートメントを「継続」する必要があります。

単純な構文要件として、開き括弧の前にスペースが必要です。

于 2013-04-26T16:07:12.227 に答える