2つの問題があります。
1)%ifpath%
スペースが含まれているため、引用符で囲む必要があります。引用符がない場合、IF EXISTは、名前が最初のスペースを停止すると見なします。
2)バッチパーサーは、SETコマンドの値がいつ終了するかを知りません。ELSE句を値の一部として扱っています。それは括弧で簡単に解決できます。
set "ifpath=C:\Program Files\App"
if exist "%ifpath%" (SET ppath=C:\Program Files) ELSE SET ppath=C:\Program Files(x86)
echo "%ppath%\App"
(x86)
テストを逆にして、バージョンから始めたとしましょう。パーサーは値がの最初の括弧で終わると考えるため、括弧を追加するだけでは問題は解決しません(x86)
。これは、エスケープすることで解決できます。
set "ifpath=C:\Program Files(x86)\App"
if exist "%ifpath%" (SET ppath=C:\Program Files(x86^)) ELSE SET ppath=C:\Program Files
echo "%ppath%\App"
または、より良い方法は引用符を使用することです。
set "ifpath=C:\Program Files(x86)\App"
if exist "%ifpath%" (SET "ppath=C:\Program Files(x86)") ELSE SET "ppath=C:\Program Files"
echo "%ppath%\App"