コードは次のとおりです。
setlocal EnableDelayedExpansion
FOR /f "usebackq tokens=*" %%X in (`dir /a-d /s /b "!search_path!" 2^>^&1`) DO @(
set file_path=%%X
rem do other stuff
)
ソース パスにバッククォート、パーセンテージ、感嘆符、^ エスケープ記号などの特殊文字が含まれている可能性があるため、遅延展開がオンになっています。これらの文字はすべて Windows パスで使用できますが、それらが存在するかどうか、どこに存在するかはわかりません。ダブル パーセント パラメータ %%X をどうするか、展開せずに別の変数に渡す方法が問題になります。DE がオンの場合、感嘆符は変数として扱われ、さまざまな奇妙なエラーが発生します。同じことは、DE を無効にした場合です。同じ状況ですが、今回はパーセンテージです。
どんなに奇妙な文字でも、Windowsシステムで見つけることができるすべての許可されたパスに対してこれらの行を安全にする方法はありますか?
問題は、パラメーターのダブル パーセントからノーマルにデータを安全に渡す方法に要約され%variable%
、その瞬間からデータが遅延拡張を安全に通過できるようになります。