forコマンドの憂鬱。ファイルセットのリカージョン
例えば、ファイル名の先頭に文字列を付加しようと、
for %%I in (*.txt) do rename "%%I" "hoge_%%I"
なんてやると、リカージョンを起こします。hoge_hoge_aaa.txt みたいに。
この問題を避けるために、
for /f "delims=" %%I in ('dir /b *.txt') do rename "%%I" "hoge_%%I"
なんてやると、今度は、非シフトJIS文字を含むファイル名が扱えなくなります。
まぁ、そういうケースはあまりないと思いますが。。。
そこで、ファイルセットをいったん環境変数に溜めて、そこから再び取り出します。
setlocal enabledelayedexpansion
set LF=^
set BUF=
for %%I in (*.txt) do set BUF=!BUF!!LF!%%I
for /f "delims=" %%I in ("!BUF!") do rename "%%I" "hoge_%%I"
遅延展開でLF文字を使って結合すると、「複数行の文字列」が作れます。
for /f in ("文字列")を使うと、「複数行の文字列」から1行ずつ順次取り出せます。
« フォルダの表示モードを切り替える。 | トップページ | バッチファイルだけで、UnicodeLE や UTF-8 の BOM を除去する。 »