スポンサーリンク

BATのforループで,「0埋めされた数値」を連番で出力しよう (環境変数の遅延展開と,数値の大小比較判定の方法)


MS-DOSのバッチファイルで,連続した番号を表示してみよう。

数値の桁数が1ケタの場合は,先頭を「0埋め」する。


この数値は変数の中に保管しておき,ファイル名とかの命名のために自由に応用できるようにしておく。

@echo off

rem 01から50までの0埋めされた数値を出力するバッチ

rem forループ内の環境変数を遅延展開する
SETLOCAL enabledelayedexpansion

rem 1から50まで数値を増減しながらループ
for /L %%i in (1, 1, 50) do (

  set DIR_NUM=%%i
  
  rem カウンター数値を0埋め
  if %%i LSS 10 (
    rem 遅延展開された環境変数は%ではなく!で囲む
    set DIR_NUM=0!DIR_NUM!
  )

  rem 0埋めされた数値を表示  
  echo !DIR_NUM!
)

ENDLOCAL

pause

これでOK。

短いシンプルなスクリプトだが,使われているBATのテクニックは

  • for文の指定回数分の繰り返しループ
  • 変数の遅延展開
  • if文での数値の大小算術判定

など。


参考:

Windowsバッチファイルで指定回数ループさせる - chakimarの日記
http://d.hatena.ne.jp/chakimar/201301...

  • forコマンドに/Lオプションを付けて実行する。開始値,増分値,終了値。


くらこしLB::|s|e|r|v|e|r|r|o|o|m|: メモ書き:コマンドプロンプトで数値ゼロ埋め
http://www.otto.to/~ada/archives/2010...

  • コマンドプロンプトはbashとか他のシェルからするとかなりできることは少ないが、大きな労力節約の為には多少の泥臭さには甘んじなければならない
  • LSS演算子で数値を比較


Studio ODIN - blog風小ネタ集 > コマンドプロンプトの遅延環境変数
http://www.odin.hyork.net/write/write...

  • FOR ループなどを使っているときに 「あれ? 変数の値が変わらない??」という場合,変数が「即時展開」されてしまっている
  • CMD内で遅延して変数を評価させて解決


発端になった質問:

フォルダ「3101」内には「index.html」があります。 同様のフォ..
http://q.hatena.ne.jp/1384527660

関連する記事:

開発に役立つ,BATファイルの書き方・パターン集 (コマンドプロンプトの定石を体系的に学び,バッチ中級者になろう)
http://language-and-engineering.hatenablog.jp/entry/20130502/PatternsOfMSDOSo...


bat中でforループをネストし,サブルーチンを呼び出して,条件付きファイル検索の結果を一斉コピーしよう (ファイル名の重複防止機能付き)
http://language-and-engineering.hatenablog.jp/entry/20111030/p1


バッチファイルで,ログや日報のローテーションをする (環境変数の部分文字列を抽出する方法)
http://language-and-engineering.hatenablog.jp/entry/20081205/1228457988