私のスクリプトの 1 つで、IF
ステートメント内にかっこを含む変数を使用する必要がありますが、シナリオによっては、文字列に閉じかっこがないか、スクリプトが* was unexpected at this time
(実際にはアスタリスクではない) 途中で終了します。
例
@echo off
SET path=%programFiles(x86)%
echo Perfect output: %path%
IF NOT "%path%" == "" (
REM Variable is defined
echo Broken output: %path%
)
pause >nul
出力
Perfect output: C:\Program Files (x86)
Broken output: C:\Program Files (x86
C:\Program Files (x86)
これは、閉じ括弧がステートメントの終わりであるIF
と見なされ、ステートメントが完了する前に終了するためだと思います/知っていますecho
。
これを回避する簡単な方法はありますか?できれば頼らずに
- 複数行のコードを実行する必要があるため、単一行の
IF
ステートメント、 GOTO
実用的ではないため、大量のsSETLOCAL EnableDelayedExpansion
その方法はOS間で一貫して機能しないことをどこかで読んだことを思い出したので、!path!
の代わりに使用します。%path%
そうでない場合は、提供された最も信頼性の高いソリューションが何であれ、喜んで受け入れます。
(シナリオは議論の余地がありません。これは、問題の洗練された集中的な例にすぎません。構造は、実際のスクリプトのように、このようにする必要があります。理由については説明しません。問題を混乱させ、実際の問題から注意をそらすだけです。)