3

次のコマンドが問題なく動作する理由:

set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME set PATH=.;%PATH%

ただし、「if」を括弧付きで使用すると、「\Path\With は現時点では予期されていませんでした」というエラーが発生します

set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME ( 
   set PATH=.;%PATH%
)
4

1 に答える 1

5

)キャラクターは特別な場合もあれば、そうでない場合もあります。

アクティブなが存在する場合(、次の引用符で囲まれていない、エスケープ)されていないものがブロックを閉じます。

コマンド引数にアクティブな(、引用符で囲まれていない、エスケープ)されていないものがない場合は、単にリテラルとして扱われます。

PATH変数に)は、IFブロックを途中で閉じているものが含まれています。あなたの場合、割り当ての周りに引用符を追加することで修正できます。

set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined APP_HOME ( 
   set "PATH=.;%PATH%"
)

ただし、注意してください。PATHに、すでに引用されているパスが含まれている場合があります。PATH内にすでに引用符がある場合、割り当てを引用符で囲むと、割り当てが壊れる可能性があります。

これは、現在の定義が何であるかに関係なく、PATHに値を付加する確実な方法です。このコードは、遅延拡張が最初は無効になっていることを前提としています。

set PATH=C:\Program Files (x86)\Path\With whitespaces\
if defined temp (
  setlocal enableDelayedExpansion
  for /f "eol=: delims=" %%P in ("!path!") do endlocal & set "PATH=.;%%P"
)
于 2012-12-19T18:09:11.630 に答える