HEXA BLOG

プログラム

HEXA BLOGプログラム2012.4.25

日付取得バッチファイル

こんちには。平尾ですわーい(嬉しい顔)
本日の大阪の最高予想気温は26度exclamation×2
かと思えば明日は19度と、寒暖の差が激しいですねふらふら
体調を崩さないよう気を付けなくては…!

2010-10-14-0.png

今回は日付取得バッチファイルについて書きたいと思います。
バッチファイルが有効に働くのは以下のようなときです。
 ・一括で何かさせたいとき (ex.一括データコンバート)
 ・自動で何かさせたいとき (ex.Jenkinsでのデイリービルド)
 ・一連の必要な手順をまとめておく (ex.ROMイメージの作成CD
こういったときに
『本日の日付をフォルダ名に設定する』
といったようなことができると非常に助かります決定
本日ですと 20120425 といった8桁の日付が欲しいわけですが、
日付の取得はどう書けばいいのでしょうか?
一番簡単な日付取得として次のように書く方法があります。
(仮に日付を表示する形をとっています)

echo %date:/=%

ただし、OSや設定で曜日出力が入ったりすることがあり、
うまくいかないこともあります…もうやだ〜(悲しい顔)
そんなときは文字の位置と文字数を指定し、
年月日を抜き出すという手があります手(パー)

echo %date:~0,4%%date:~5,2%%date:~8,2%

ただし、これも曜日表示が前に来たりするとダメだったりします。
もし環境が固定されていれば、文字取得位置をずらすだけで問題ありませんが、
チームで作業をしていると個人個人で全然違う設定になっていることも多々あります。
もし英語などの設定だと、曜日が英語だったりするわけで…ちっ(怒った顔)爆弾
PCによって日付出力が変わってしまうのは仕様ならば、違うアプローチで対応するしかない!パンチ
というわけで最終的に落ち着いたのは、
バッチファイルから WSH (Windows Script Host) を呼び出す形ですひらめき
WSH は Windowsの機能として入っていますので、新たなインストールなどは不要です。
バッチファイルの内容は以下のようになります。

@echo off
setlocal
rem 一時使用VBスクリプト(temp.vbs)の作成
echo strNow = Now() > temp.vbs
echo WScript.Echo Year(strNow) ^& Right("0" ^& Month(strNow), 2) ^& Right("0" ^& Day(strNow), 2) >> temp.vbs
rem 日付を取得
for /f %%A in ('cscript temp.vbs') do set today=%%A
echo %today%
rem 一時使用ファイルを削除
del temp.vbs
endlocal
pause

バッチファイルの流れを簡単に説明しますと、
 1VBスクリプト一時ファイルを作成
 2一時ファイル内で、年月日をそれぞれ取得、8桁に揃えています
  (月日にはそれぞれ先頭に0を加えて右の2桁を取得することで、必ず2桁になるようにしています)
 3for文からスクリプトを呼び出し、出力されたものを変数にセット
 4一時ファイルを削除
となります。
使用頻度が高く、一時ファイルの作成→削除の処理がもったいない場合は
別ファイルで用意しておくのが良いと思います。
と、日付出力だけでこんなに苦労するのも理不尽あせあせ(飛び散る汗)な気がしますが、
何にせよこれでバッチファイルへの組み込みができると思いますメモ

2010-10-14-0.png

身の回りの定型作業など、バッチファイルなどを活用していけば
日々の作業が少しずつ楽になっていきますsoon
作るまでの手間はありますが、トータルで見ると大きく変わってきます時計
できるだけ自動化をすすめて効率良い仕事、より良い仕事をしていけるよう
がんばっていきたいと思います!パンチ
(最近はRubyがマイブームだったりします)

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE