batファイルを使って、とあるファイルを作成する処理が、発生しました。
その際に、実行した日付と時刻をファイル名に利用したいと考えました。
具体的には、日付の月と日、時刻の、時・分と秒を、「_」アンダーバーでつないだ
mmdd_hhmm_ss.拡張子
といった形式にしたかったのです。
日時をファイル名に利用してファイルを作成するサンプル
以下の処理内容を記述したbatファイルを実行すると、ファイル内に「This is a sample text.」と入力された、「mmdd_hhmm_ss.txt」形式で名前をつけられたファイルが、tempフォルダーに作成されます。
set mm=%date:~5,2%
set dd=%date:~8,2%
set time00=%time: =0%
set hh=%time00:~0,2%
set mn=%time00:~3,2%
set ss=%time00:~6,2%
@echo on
cd \temp
set filename=%mm%%dd%_%hh%%mn%_%ss%
echo This is a sample text.>%filename%.txt
pause
バッチファイルで行っている処理
実際には、
echo This is a sample text.>ファイル名を作成する処理.txt
といった1行だけでも書くこと可能ですが、そうするとその1行が非常に長くなり、可読性が低下するため、変数をたくさん使って書いています。
月・日部分の取得
dateコマンドを使うと、日付が
2021/02/08
といった形式で取得できます。
この日付を表すデータから、5文字目の後ろから始まる月部分の2文字を取得して、変数mmに格納し、
set mm=%date:~5,2%
8文字目の後ろから始まる日部分の2文字を取得して、変数ddに格納しています。
set dd=%date:~8,2%
私は使いませんでしたが、もしも年部分の4桁が必要なら、
set yyyy=%date:~0,4%
です。
時・分・秒部分の取得
同様の考え方で時刻から、時・分・秒部分を取得したいのですが、timeコマンドを実行すると、時刻が、
9:59:59.99
といった形式で返されます。
日付は1桁の場合に、
2021/ 2/ 8
ではなく、ゼロサプレスされた
2021/02/08
が取得できていたのに対し、時刻はそうなっていません。
そこで、半角スペースを「0」に置換した時刻を表すデータを変数time00に格納しておきます。
set time00=%time: =0%
このゼロサプレスされた時刻を表すデータから、月・日のデータを取得したのと同じ考え方で、変数hh・mn・ssにそれぞれ格納しています。
set hh=%time00:~0,2%
set mn=%time00:~3,2%
set ss=%time00:~6,2%
変数mm・dd・hh・mn・ssの値を使って、拡張子のないファイル名を変数filenameに格納して、
set filename=%mm%%dd%_%hh%%mn%_%ss%
文字列「This is a sample text.」をファイルに出力しています。
echo This is a sample text.>%filename%.txt
表示の切り替え
変数mm・dd・hh・mn・ssに値を格納する処理は、コマンドプロンプトに表示したくないので
@echo off
と、非表示にしておいて、保存先のフォルダーを変更する処理以降は、表示するために、
@echo on
としています。
Home » Windows(ウィンドウズ)の使い方 » コマンドプロンプト » バッチ処理で日時をファイル名に利用してファイルを作成する