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

今回は日付取得バッチファイルについて書きたいと思います。
バッチファイルが有効に働くのは以下のようなときです。
・一括で何かさせたいとき (ex.一括データコンバート)
・自動で何かさせたいとき (ex.Jenkinsでのデイリービルド)
・一連の必要な手順をまとめておく (ex.ROMイメージの作成)
こういったときに
『本日の日付をフォルダ名に設定する』
といったようなことができると非常に助かります
本日ですと 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
バッチファイルの流れを簡単に説明しますと、
VBスクリプト一時ファイルを作成
一時ファイル内で、年月日をそれぞれ取得、8桁に揃えています
(月日にはそれぞれ先頭に0を加えて右の2桁を取得することで、必ず2桁になるようにしています)
for文からスクリプトを呼び出し、出力されたものを変数にセット
一時ファイルを削除
となります。
使用頻度が高く、一時ファイルの作成→削除の処理がもったいない場合は
別ファイルで用意しておくのが良いと思います。
と、日付出力だけでこんなに苦労するのも理不尽な気がしますが、
何にせよこれでバッチファイルへの組み込みができると思います

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