0

これを入力しましたが、まったく機能しません

set ifpath=C:\Program Files\App

if exist %ifpath% SET ppath=C:\Program Files ELSE SET ppath=C:\Program Files(x86)

echo "%ppath%\App"

シンプルですが、スクリプトを機能させるために何時間も費やしました。エコー時にppathが欠落し続けます。条件を削除して単純に ppath をパスに設定すると、表示されます。

目標は、Program Files(x86) が存在するかどうかを検出し、存在する場合はそこにインストールすることです。

4

2 に答える 2

3

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"
于 2013-01-24T21:41:26.607 に答える
1

次のようなことができます。

if exist "%ifpath%" ( call :PF ) else ( call :PFx86 )
:PF
set "ppath=c:\Program Files"
goto :EOF
:PFx86
set "ppath=c:\Program Files(x86)"
goto :EOF

callandの漠然とした範囲が私iffor混乱させるとき、私は時々そのような発言をします。ハック的で無駄が多いことは認めますが、生活に応急処置をして先に進むには最適です。:)

于 2013-01-24T21:19:12.940 に答える