Windowsバッチファイルパーサーでスペース、括弧、その他の特殊文字を含む変数を適切に処理するためのさまざまなアプローチに関する多数のスレッドを読みましたが、どの推奨事項でも問題を解決できないようです。
これがスクリプトです(回避策を試す前に)。その目標は、variable01とvariable02で見つかった値に基づいてvariable03の値を設定することです。
set variable01="C:\Program Files (x86)\SomeProgram\Subfolder"
set variable02="${macro}"
set variable01=%variable01:"=%
set variable02=%variable02:"=%
set variable03=""
if %variable02:~0,1%==$ (
if %variable01:~0,1%==$ (
set variable03=%variable03:"=%
) else (
set variable03=-o '%variable01%'
)
)
... variable01とvariable02の値は事前にはわかりません。スクリプトを実行する前に別のプログラムで置換されるため、上記のスクリプトは、置換が行われた後のvariable01とvariable02の値のセットの例を示しています。
このスクリプトの実行時に発生するエラーは次のとおりです。
\SomeProgram\Subfolder' was unexpected at this time.
...これは上記のスクリプトの最後の「set」行に対応します。このエラーは、variable01の値の括弧が原因であると想定しました。
その行をこれに変更すると:
set "variable03=-o '%variable01%'"
...次に、このエラーが発生します:
Files was unexpected at this time.
...これは、variable01のスペースをトークン化しようとしていることを示しているようですが、パーサーはまだ満足していません。
次に、スクリプトの先頭に次の行を追加します。
setlocal enableextensions enableDelayedExpansion
...そして%variable01%を!variable01 !に変更しても、同じエラーが発生します。
明らかに、variable03の値が次の値であるという私の要件を満たすためにバッチファイルパーサーが何を必要とするかを理解していません。
-o 'C:\Program Files (x86)\SomeProgram\Subfolder'
...助言がありますか?