0

以下のバッチ スクリプトの簡単な手順でエラーが発生します。それは言う

'else' is not recognized as an internal or external command,
operable program or batch file.
) was unexpected at this time.

いくつか助けてもらえますか?

set var_machine64 = 0

if exist "C:\Program Files (x86)" ( set var_machine64 = 1 )

if !var_machine64! == 1 (
    If exist "C:\Program Files (x86)\Microsoft" (
        echo Microsoft folder not available 
        goto End ) ) 
else (
        If exist "C:\Program Files \Microsoft" (
        echo Microsoft folder not available 
        goto End ) )

:End
Exit
4

1 に答える 1

2

else、最後のブロックを閉じる行と同じ行にある必要があります。つまり)

if !var_machine64! == 1 (
    If exist "C:\Program Files (x86)\Microsoft" (
        echo Microsoft folder not available 
        goto End
    )
) else (
    If exist "C:\Program Files\Microsoft" (
        echo Microsoft folder not available 
        goto End
    )
)

フォルダー名のインデントと余分なスペースも自由に修正しました。

これにより、構文エラーの差し迫った問題は修正されますが、バッチ ファイルが機能しないため、役に立ちません。=inステートメントの前後に空白を使用することはできませんset。そうしないと、値が 1 で始まるスペースで終わる変数が作成されるためです。そう:

set var_machine64=0
if exist "C:\Program Files (x86)" ( set var_machine64=1 )

物事がよりうまく機能します。また、遅延拡張を使用するsetlocal enabledelayedexpansionには、バッチ ファイルでその前に、cmdまたは/v:on. ファイル全体を表示していないと思います (これは問題ありませんが、この短いスニペットのエラー率を考えると、他のすべてを再確認する必要があると思います)。

ランダムな補足:exit対話型セッションから実行すると、バッチ ファイルが強制終了されるため、バッチ ファイルに含めるのは適切ではありません。バッチ ファイルを終了するだけの場合 (コマンド プロセッサ全体ではなく)、exit /bまたはを使用しますgoto :eof

于 2012-10-11T08:36:55.670 に答える