« テンポラリファイルの代わりに環境変数を使う。 | トップページ | ファイル名に=;,や全角空白を使うときは、半角空白も併せて使うべし。 »

2008年2月19日 (火)

FOR /F の eol について

eol は end of line ではありません。除外行行頭文字です。exclusive of line ?

ヘルプの
eol=c           - 行末のコメント文字を指定します (1 文字)。
は嘘です。行頭が正しい?

eol文字のデフォルトは ; です。これは要注意です。eol=は必須と思ったほうが安全です。

eol文字がdelims文字に含まれると、eol文字は無効になります。

なので、eol文字をなくすには、delims文字と同じものを指定するとよいでしょう。

しかし、delims文字がないときに、eol文字をなくすのは、難しいです。

そこで、データに含まれない文字、制御文字を指定するとよいでしょう。
メモ帳では、DEL文字が使えます。入力は、Ctrl+BSキー、または、Alt+テンキーの0127です。
コマンドプロンプトでは、いろんなものが使えますが、^L や ^[ が使えます。

逆に、delims文字と同じものをeol文字に指定したいときは、困ります。

そういうときには、FOR文を2段組みにするとよいでしょう。

FOR /F "delims= eol= " %%I IN (...) DO FOR /F "eol= delims= " %%J IN ("%%I") DO ...
    delims=なし eol=空白                   eol=なし delims=空白

例えば、DIR /X の結果から短いファイル名を取り出すには、

FOR /F "delims= eol= " %%0 IN ('dir/x %1') DO FOR /F "tokens=4" %%4 IN ("%%0") DO ECHO %~dps1%%4
    delims=なし eol=空白                       eol=; delims=空白タブ

« テンポラリファイルの代わりに環境変数を使う。 | トップページ | ファイル名に=;,や全角空白を使うときは、半角空白も併せて使うべし。 »