竹林のゆとりブログ

山奥で生活し、日々の思いをつらつらと書くブログ。 IT、数学、アニメなど。

batの文法~for編②~

forコマンドの続きです。 自由度の最も高い、/fオプションです。

tokenオプション

指定したtokenの部分を取得します。半角スペースやタブ文字で区切られた文字になる。

REM -------------------------------
REM for /f token
REM -------------------------------
for /f "tokens=1,3" %%i in (a.txt) do echo %%i %%j >> ans.log

注意点

  • token=数字,数字,...という形式のオプションを指定することで、指定したtokenのオプション情報を入手できる。
  • tokenのみだと1つ目をさす
  • 連続している場合はtoken=2-4と指定可能
  • 複数指定しているうち、一部がない場合は、該当箇所のみ表示
  • ひとつも該当していない場合は無視される

delimisオプション

tokenの区切り文字を変更します

REM -------------------------------
REM for /f token delims
REM -------------------------------

for /f "tokens=2,3 delims=; " %%i in (a.txt) do echo %%i %%j >> ans.log

注意点

  • ;を始めとした、記号を指定する
  • 英数字は認識されない?詳しいことは不明
  • 空白も含めたければ "delimis=; "と空白もつける
  • スペースとタブ両方使う場合は、タブを先に書く
  • delimsはオプションの中で最後に指定する

eol,skipオプション

eolは指定した文字から始まる行を消す。 skipは行頭から指定した行数を無視する

REM -------------------------------
REM for /f token eol
REM -------------------------------

for /f "tokens=2,3 eol=a " %%i in (a.txt) do echo %%i %%j >> ans.log
REM -------------------------------
REM for /f token skip
REM -------------------------------

for /f "tokens=2,3 skip=3 " %%i in (a.txt) do echo %%i %%j >> ans.log

usebackqオプション

in ()の中身にコマンドを指定できる。

REM ---------------------------
REM for /f usebackq
REM ---------------------------

for /f "usebackq tokens=1" %%a in (`sc query`) do (
echo %%a >> a.txt
)

まとめ

いかがだったでしょうか? 自分でまとめてみて、forコマンドがずいぶん近くなりました。 わかりづらいものはまとめてしまって、自分の消化できる対象にするべきですね。

頑張りましょう。