|
|
●DOS/Windowsのバージョン↓ Microsoft Windows XP [Version 5.1.2600] forにてファイルやフォルダの一覧を取得して処理しようとすると、遅延環境変数の展開を有効にしていると ! が消えてしまいます。また遅延環境変数の展開を無効にしていると % などがおかしくなります。両方の特殊文字に対応した処理の方法についてお知恵をお貸し下さい。 以下に掲げるサンプルを例えばa.cmdとして保存し C:\>a a!b%c.d と実行するとわかりやすいと思います @echo off :test echo 遅延環境変数の展開は無効 setlocal disabledelayedexpansion echo OKだが再帰処理や関数的処理には向かないのでNG for %%F in ("%~1") do echo %%F echo 対象に%%があると困る for %%F in ("%~1") do call :check %%F echo callする段階で対象に%%があると困る for %%F in ("%~1") do ( echo %%F call :check %%F ) echo ループ内部で遅延を有効にした時点で対象の!が消失 for %%F in ("%~1") do ( echo %%F setlocal enabledelayedexpansion echo %%F set S1="%%~F" set S1=!S1:%%=%%%%! call :check !S1! endlocal ) echo 遅延環境変数の展開を有効 setlocal enabledelayedexpansion echo 対象に^^!があると消えてる for %%F in ("%~1") do echo %%F echo 対象に^^!や%%があると^^!がまず消え、callすると%%が消える for %%F in ("%~1") do ( echo %%F call :check %%F ) echo 対象に^^!があるとループ内容に突入した時点で消えてるので処理しようが… for %%F in ("%~1") do ( echo %%F set S2="%%~F" set S2=!S2:%%=%%%%! call :check !S2! ) endlocal goto :eof :check echo "check %1" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|