【Batch】バッチで簡易テストデータを作ることを考える

■ はじめに

バッチでテストデータ(今回は、CSVファイル)を作ることを考える

はじめは、コピーして保存し実行すれば、
簡単なテストデータができればいいなーっと思ったが
ちょっとだけ凝ったもの
例えば、ランダムで文字列データ生成や指定サイズでデータを作る
などは、プログラム組んだ方が早いなーっと思った、、、

ただ、意外と学ぶものがあってよかった。

目次

【1】Tips
 1)ゼロ埋めパディング
 2)yyyy/mm/dd hh:mn:ssで取得する
 3)乱数を取得する
 4)「setlocal EnableDelayedExpansion」
【2】サンプル
 例1:指定行数までデータを生成する

【1】Tips

1)ゼロ埋めパディング

サンプル

@echo off

REM 今回は、5桁(00010)でデータを作る
set number=10

REM [1] "0" x 4(5-1(数字分)) と対象数字を結合させる(000010)
set fomated_number=0000%number%

REM [2] 5桁を超える部分は切り落とす(00010)
set id=%fomated_number:~-5%

echo %id%
pause

参考文献
https://bbh.bz/2019/09/12/windows-bat-format-0padding/

2)yyyy/mm/dd hh:mn:ssで取得する

@echo off
REM 日付を取得する
set today=%date%
REM 時間を取得する
set now=%time: =0%
echo %now%

REM 日付を年、月、日に分解する
set year=%today:~-10,4%
set month=%today:~-5,2%
set day=%today:~-2,2%

REM 時間を時、分、秒に分解する
set hour=%now:~0,2%
set minute=%now:~3,2%
set second=%now:~6,2%
REM yyyy/mm/dd hh:mm:dd
set current_datetime=%year%/%month%/%day% %hour%:%minute%:%second%

echo %current_datetime%
pause

参考文献
https://www.atmarkit.co.jp/ait/articles/0405/01/news002.html
https://hiroto1979.hatenablog.jp/entry/2017/10/14/003418

3)乱数を取得する

@echo off

REM 0~32767までの数値がランダムで取得
echo %random%
echo %random%
echo %random%
echo %random%

pause

参考文献
https://jj-blues.com/cms/wantto-randomnumber/

4)「setlocal EnableDelayedExpansion」

* for文の中で値を変更したい場合、
 for文全体を「setlocal EnableDelayedExpansion」と
 「endlocal」で挟む必要がある
* for文内で使用する変数は「%」ではなく「!」で囲む
* 詳細は、以下の関連記事の「【7】遅延環境変数」を参照のこと

https://dk521123.hatenablog.com/entry/2010/11/23/165433

【2】サンプル

例1:指定行数までデータを生成する

@echo off

REM 変数を設定
set OUTPUT_FILENAME=output.csv
set FILE_HEADER=id,name,update time,remarks
set MAX_LINE=10

REM 日付を取得する
set today=%date%
REM 時間を取得する
set now=%time: =0%

REM 日付を年、月、日に分解する
set year=%today:~-10,4%
set month=%today:~-5,2%
set day=%today:~-2,2%

REM 時間を時、分、秒に分解する
set hour=%now:~0,2%
set minute=%now:~3,2%
set second=%now:~6,2%
REM yyyy/mm/dd hh:mm:dd
set current_datetime=%year%/%month%/%day% %hour%:%minute%:%second%

REM 実行中に値を変化させたい場合
setlocal EnableDelayedExpansion

REM ****************************
REM * Main
REM ****************************
(
  REM 1行目にヘッダー
  echo %FILE_HEADER%

  REM Body部をループで作成する
  for /L %%i in (1, 1, %MAX_LINE%) do (
    REM ゼロ埋めしたIDを生成
    set number=%%i
    set fomated_number=0000!number!
    set id=!fomated_number:~-5!

    REM Body部
    echo !id!,Mike,!current_datetime!,xxxx-!random!-xxxx
  )

) > %OUTPUT_FILENAME%
REM ****************************

endlocal

出力結果

id,name,update time,remarks
00001,Mike,2021/04/24 18:10:41,xxxx-2036-xxxx
00002,Mike,2021/04/24 18:10:41,xxxx-24001-xxxx
00003,Mike,2021/04/24 18:10:41,xxxx-21998-xxxx
00004,Mike,2021/04/24 18:10:41,xxxx-9947-xxxx
00005,Mike,2021/04/24 18:10:41,xxxx-21798-xxxx
00006,Mike,2021/04/24 18:10:41,xxxx-16062-xxxx
00007,Mike,2021/04/24 18:10:41,xxxx-23932-xxxx
00008,Mike,2021/04/24 18:10:41,xxxx-998-xxxx
00009,Mike,2021/04/24 18:10:41,xxxx-2343-xxxx
00010,Mike,2021/04/24 18:10:41,xxxx-20117-xxxx

関連記事

バッチ ~入門編 ~
https://dk521123.hatenablog.com/entry/2010/07/06/223905
バッチ ~ 基本編 / 変数の扱い ~
https://dk521123.hatenablog.com/entry/2010/11/23/165433
バッチ ~ 基本編 / 制御文 ~
https://dk521123.hatenablog.com/entry/2015/08/26/221935
バッチ ~ 基本編 / コピー&削除 ~
https://dk521123.hatenablog.com/entry/2010/11/22/230218
バッチ ~ 基本編 / ファイル・ディレクトリの扱い ~
https://dk521123.hatenablog.com/entry/2010/11/23/164811
バッチ ~ 基本編 / リダイレクション ~
https://dk521123.hatenablog.com/entry/2015/03/16/232627
バッチ ~ タイマー起動 ~
https://dk521123.hatenablog.com/entry/2010/11/24/172455