ファイルをタイムスタンプ付きでコピーするバッチファイルを作った

Windowsでファイルをコピーしてバックアップするときに、
毎回右クリックしてコピーを選ぶのが面倒だったので、
(あと"コピー (2)"みたいなファイル名のファイルができるのが嫌だったので)
バッチファイルを作った。


下記の囲みの中をメモ帳にコピーして、ファイル名をtest.batで保存する。
(ファイル名は何でもよいが、拡張子は.batにする)

rem システム日付(YYYY/MM/DD)を変数にセットする。
set dd=%date%
rem システム時刻(HH:MM:SS)を変数にセットする。SPACEは0に置換する。
set tt=%time: =0%
rem YYYY/MM/DD HH:MM:SS を記号無しで連結して(YYYYMMDDHHMMSS)変数にセットする。
set sysdatetime=%dd:~0,4%%dd:~5,2%%dd:~8,2%%tt:~0,2%%tt:~3,2%%tt:~6,2%
echo %sysdatetime%
rem ファイルをコピーする。
rem コピー後のファイル名は(元のファイル名+YYYYMMDDHHMMSS+拡張子)
copy %1 "%~dpn1%sysdatetime%%~x1"


test.bat にファイルを&ドロップすると、そのファイルをコピーする
コピー後のファイル名は「元のファイル名+タイムスタンプ」。



参考にしたサイト

バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法
http://orangeclover.hatenablog.com/entry/20101004/1286120668

バッチ・ファイル中で日付をファイル名に使用する
http://www.atmarkit.co.jp/ait/articles/0405/01/news002.html

DOSバッチで日付・時刻の取得
http://d.hatena.ne.jp/ymaru/20071123/p1



【2014/07/15 追記】
ファイル名に半角スペースが含まれているとうまく処理できないため、
ソースコードを以下の通り変更した。
変更前:copy %1 %~dpn1%sysdatetime%%~x1

変更後:copy %1 "%~dpn1%sysdatetime%%~x1"


なお、Windowsの仕様で
「全角スペースを含む かつ 半角スペースを含まない」
ファイルはこのバッチではコピーできません。


バッチの全角スペースに関するバグ
http://d.hatena.ne.jp/korokorokoron/20100316