Home » Windows(ウィンドウズ)の使い方 » コマンドプロンプト » バッチ処理で日時をファイル名に利用してファイルを作成する

バッチ処理で日時をファイル名に利用してファイルを作成する

動作検証バージョン:64bit Windows 10 Pro

batファイルを使って、とあるファイルを作成する処理が、発生しました。

その際に、実行した日付と時刻をファイル名に利用したいと考えました。
具体的には、日付の月と日、時刻の、時・分と秒を、「_」アンダーバーでつないだ
  mmdd_hhmm_ss.拡張子
といった形式にしたかったのです。

[スポンサードリンク]

日時をファイル名に利用してファイルを作成するサンプル

以下の処理内容を記述したbatファイルを実行すると、ファイル内に「This is a sample text.」と入力された、「mmdd_hhmm_ss.txt」形式で名前をつけられたファイルが、tempフォルダーに作成されます。

@echo off
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(ウィンドウズ)の使い方 » コマンドプロンプト » バッチ処理で日時をファイル名に利用してファイルを作成する

「コマンドプロンプト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.