コマンドプロンプト 日付の操作方法

バッチファイル作成時に日付を扱うことになった.
ここでは日付・時刻の基本的な使い方を紹介.

動作環境

  • windows10 Home x64

前提条件

本記事では次の方針で日付・時刻の取り扱い方法を紹介する.

  • 環境変数に格納されている値の文字列操作を行う

詳しくは次のコマンドでヘルプを見てみるとよい.

  • set /?

年月日

年月日は次のコマンドで表示可能.

  • %date%
C:\>echo %date%
2017/08/13

時刻

時刻は次のコマンドで表示可能.

  • %time%
C:\>echo %time%
11:15:09.30

日付・時刻中の任意の文字列を取得

日付・時刻を扱うときは, 次のような処理をしたい場合が多い.

  • 年 だけ抽出して演算
  • 月 だけ抽出して演算
  • 日 だけ抽出して演算
  • 時間 だけ抽出して演算
  • 分 だけ抽出して演算
  • 秒 だけ抽出して演算

ここでは, ひとまず抽出する方法を紹介.
概要は次の通り.

  • 抽出のためのコマンド
  • さっそくやってみる

抽出のためのコマンド

次のコマンドで任意の位置から文字列の抽出が可能.

  • %変数名:~m,n%
項目 意味
変数名 自分で設定した変数名.
set setlocal とかで指定
~ 抽出の時にとりあえず必要
m 開始位置. 0はじまり.
n 終了位置

m はゼロ番目から数え始める.
注意しよう.

さっそくやってみる

今回はbatch fileじゃなく, コマンドプロンプトに直書きしてみる.
やることは次の通り.

  • 年 だけ抽出
  • 月 だけ抽出
  • 日 だけ抽出
  • 時間 だけ抽出
  • 分 だけ抽出
  • 秒 だけ抽出

年 だけ抽出

set TODAY=%date%_%time%
set YEAR=%TODAY:~0,4%

echo %TODAY%
echo %YEAR%

実行結果

C:\>set TODAY=%date%_%time%

C:\>set YEAR=%TODAY:~0,4%

C:\>
C:\>echo %TODAY%
2017/08/13_11:28:37.62

C:\>echo %YEAR%
2017

月 だけ抽出

set TODAY=%date%_%time%
set MONTH=%TODAY:~5,2%

echo %TODAY%
echo %MONTH%

実行結果

C:\>set TODAY=%date%_%time%

C:\>set MONTH=%TODAY:~5,2%

C:\>echo %TODAY%
2017/08/13_11:30:01.71

C:\>echo %MONTH%
08

日 だけ抽出

set TODAY=%date%_%time%
set DAY=%TODAY:~8,2%

echo %TODAY%
echo %DAY%

実行結果

C:\>set TODAY=%date%_%time%

C:\>set DAY=%TODAY:~8,2%

C:\>echo %TODAY%
2017/08/13_11:31:17.26

C:\>echo %DAY%
13

時間 だけ抽出

set TODAY=%date%_%time%
set HOUR=%TODAY:~11,2%

echo %TODAY%
echo %HOUR%

実行結果

C:\>set TODAY=%date%_%time%

C:\>set HOUR=%TODAY:~11,2%

C:\>echo %TODAY%
2017/08/13_11:32:04.99

C:\>echo %HOUR%
11

分 だけ抽出

set TODAY=%date%_%time%
set MINIT=%TODAY:~14,2%

echo %TODAY%
echo %MINIT%

実行結果

C:\>set TODAY=%date%_%time%

C:\>set MINIT=%TODAY:~14,2%

C:\>echo %TODAY%
2017/08/13_11:32:56.51

C:\>echo %MINIT%
32

秒 だけ抽出

set TODAY=%date%_%time%
set SECOND=%TODAY:~17,2%

echo %TODAY%
echo %SECOND%

実行結果

C:\>set TODAY=%date%_%time%

C:\>set SECOND=%TODAY:~17,2%

C:\>echo %TODAY%
2017/08/13_11:33:48.09

C:\>echo %SECOND%
48

秒を後ろから指定して抽出する

分, 秒 を抽出するのなら次の技を使うと良い.

  • 文字列の後ろから m番目 を指定

「後ろから」は -(マイナス) で表現する.
たとえば 秒を指定するならこんな感じ↓

set TODAY=%date%_%time%
set SECOND=%TODAY:~-5,2%

echo %TODAY%
echo %SECOND%

実行結果

C:\>set TODAY=%date%_%time%

C:\>set SECOND=%TODAY:~-5,2%

C:\>echo %TODAY%
2017/08/13_11:44:19.18

C:\>echo %SECOND%
19

後ろから数える時は 1番目 から数え始めるっぽい.
これは先頭から数え始める場合と異なるので注意.

今回は以上.