目次
数字を任意の桁で0埋めする
例えば、数字「1」から「10」を出力するとき、「01」から「10」のように一桁の数字には前に「0」を付け足すことを考えます。
まず、普通に1から10までの数字を書き出してみます。ここでは「for」文を使うことにします。以下はそのバッチファイルと実行結果です。
1 2 3 4 5 6 7 8 9 10 |
@echo off setlocal enabledelayedexpansion for /l %%a in (1,1,10) do ( set num=%%a echo !num! ) endlocal |
このように、1から9までの出力は「0」は付きません。
これを「01~10」のようにするには、まず始めに数字の前に「0」を付け足してから、後半の二文字を切り取る操作を加えればよいでしょう。
【「0」を付け足す手順(1の場合)】
01 -(0を付け足す)-> 001 -(後半の二文字を切り取る)-> 01
【「0」を付け足す手順(10の場合)】
10 -(0を付け足す)-> 010 -(後半の二文字を切り取る)-> 10
「0」を付け足す操作は単純に「set num=0%%a」となります。そして、変数「num」から後半の二文字を切り取るには、「!num:~-2,2!」とします。(※文字列の切り取りに関しては、「文字列を自在に切り取る -やりたいこと検索-」に詳しい解説があります。)
この操作を前述のバッチファイルに組み込んでやると、
1 2 3 4 5 6 7 8 9 10 11 |
@echo off setlocal enabledelayedexpansion for /l %%a in (1,1,10) do ( set num=0%%a set num=!num:~-2,2! echo !num! ) endlocal |
となります。6行目と7行目にコードを追加しています。
以下、実行結果も期待通りです。
これを三桁で表現したい場合は、上のプログラムを
1 2 |
6行目: num=0%%a -> num=00%%a 7行目: !num:~-2,2! -> !num:~-3,3! |
と変えればオッケーです。もちろん、四桁以降も同様にして「0」を付け加えることができます。
日付を表示する(例:2017/01/01)
「0」を数値に付け加える実用例として、日付を扱う場合があります。日付の「2016/09/28」から「2016/10/07」までを連続して表示してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@echo off setlocal enabledelayedexpansion set year=2016 set month=9 set day=27 for /l %%a in (1,1,10) do ( set /a day+=1 if !day! equ 31 ( set day=1 set /a month+=1 ) set day0=0!day! set month0=0!month! set day0=!day0:~-2,2! set month0=!month0:~-2,2! echo !year!/!month0!/!day0! ) endlocal |
5行目から7行目では、始まりの一日前の年月日を各変数に代入しています。9行目からの「for」の中で、日にちを1日ずつ更新しながら表示させていきます。日にちの更新は、10行目です。11行目から14行目は9月の最終日である30日を過ぎれば、日にちを1日に戻し月を10月に進めています。
あとは前節で説明した通り、数字の前に「0」を付け足して(15, 16行目)から、後半の二文字を切り取る操作(18, 19行目)を行い表示しています。