竹林のゆとりブログ

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

batの文法~for編①~

お題の通り。batにおいてforがあまりにもわかりにくいため、実験しながら、試してみた。

前提

batにおいてforはコマンドです。 他のプログラミング言語に慣れていると違和感を感じるでしょうが、forはコマンドです。

基本

コマンドの基本的な文法を記載います。 オプションは無視しているので注意です。

for %%変数名(アルファベット一文字) in (対象ファイル名) do (
処理
)

注意点

文法上の注意点をいうと

  • 変数名はアルファベット一文字
  • 変数名は%%を使う
  • 対象ファイル名の前後は()が必須
  • ファイル名は、相対パス絶対パスともに可能。ただし、指定した文字列が変数に格納されるため、相対パス指定時と絶対パス指定時で変数の中身が異なる。
  • 複数ファイル指定時は空白をおけば認識される
  • 正規表現も指定可能
  • 処理の前後も()が必要

REM -------------------------
REM default of for
REM -------------------------
for %%A in (*.txt) do (
echo ファイル名:%%A >>a.txt
)

実行ディレクトリのtxtファイル一覧をa.txtに格納します

/d 、/rオプション

/dを指定すると、対象がファイルではなく、ディレクトリの一覧となります。 /rは正規表現の対象が下位ディレクトリまで含めたすべてとなる。

REM -------------------------
REM /d of for
REM -------------------------
for /d %%A in (*) do (
echo ファイル名:%%A >>b.txt
)
REM -------------------------
REM /r of for
REM -------------------------
for /r %%A in (*.txt) do (
echo ファイル名:%%A >>g.txt
)

注意点

  • /rの場合はファイルの一覧となる。パス名はディレクトリ名まで含めたパスとなります。
  • /r,/dは併用可能。その場合は下位ディレクトリまで含めたディレクトリ一覧となる。

/lオプション

この場合ループ対象は自分で指定することになります。

for /l %%i in (開始値、増分、終了値) do (
  処理
  )

REM -------------------------
REM /l of for
REM -------------------------
for /l %%A in (1,3,10) do (
echo 数字 %%A >> n.txt

注意点

  • 増分は正だけでない。
  • 終了値より大きい値に%%Aがなった時の処理が行われない。(実行するかの判定が一番最初にある。)

おわり

ながくなってきたので、一旦ここで終了にします。
明日はforの他のオプションについて触れます。