目次
ここでは何をしたいのか
ここでは一体何がしたいのか?とにかく、動画をご覧ください。
ここでやりたいことは、バッチファイルのアイコンの上にフォルダを乗せると、自動で日時をフォルダ名に付け足してくれるバッチファイルを作ることです。
フォルダをこのバッチファイルに通すと、以下のようなフォルダ名の変更を行います。
【バッチファイルの動作】
[元のフィルダ名] → [元のフォルダ名]_[YYYYMMDD.HHpp]
YYYY: 年
MM: 月
DD: 日
HH: 時間
pp: 分
用途としては、フォルダ内のファイルを更新したとき、この機能でフォルダに更新日時を付け足します。それによって、過去のフォルダを残しつつ新しいフォルダをどんどん作っていくことができます。
しかも、いつ更新したかがフォルダ名から一目で分かるため最新のフォルダはどれか、または昨日更新したフォルダはどれかということが瞬時に分かるようになります。
便利ですので、皆さんも使ってみて下さい。
現在の日時を使用できる形式に変える
まずは、フォルダに付け加える日付の取得からです。
「dateとtime(日付と時刻) -コマンド別解説-」で詳しく説明していますが、変数「date」と「time」から現在の日付と時間を取得できます。
この日付と時刻を利用して、フォルダ名に使います。
今回、フォルダに付ける日時は分までで充分でしょう。フォルダ名を、
[元のフィルダ名] → [元のフォルダ名]_[YYYYMMDD.HHpp]
例: バッチ関連 → バッチ関連_20170127.2005(※2017年1月27日20時5分に更新した場合)
のように、変更することを考えます。ここからは[YYYYMMDD.HHpp]の部分を「フッター」と呼ぶことにします。
まずは、YYYY、MM、DD、HH、およびppの部分を変数「date」と「time」から切り出す必要があります。この操作をするバッチファイルは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@echo off rem 必要な部分の切り出し rem 「日付」について set YYYY=%date:˜0,4% set MM=%date:˜5,2% set DD=%date:˜8,2% rem 「時刻」について set HH=%time:~0,2% set pp=%time:~3,2% rem 切り出した文字列を結合 set footer=%YYYY%%MM%%DD%.%HH%%pp% rem 確認表示 echo %footer% |
このバッチファイルを「make_footer.bat」として保存しておきます。
3行目から10行目はフッターに必要な文字列を切り出してそれぞれ変数に代入したものです。それらを組み合わせて、変数「footer」にフッターとなる文字列を結合して代入しています。文字列の切り出しについて詳しく知りたい方は、「文字列を自在に切り取る -やりたいことから検索-」を参照して下さい。
実行結果は以下の通りです。
これで、フッター部分が完成しました。
フォルダの前に日付を付け足す
次は、フッターをフォルダの前に付け足します。
まず、引数で対象となるフォルダの名前を取得しましょう。これには、「%1」を使えばよいだけです。フォルダを引数として渡してやれば、「%1」にそのフォルダ名が入ります(※引数に関しての詳しい説明は「%1,%2…%X(引数とプレースホルダー) -やりたいことから検索-」をご覧下さい。)
そして、フッターとフォルダ名「%1」を繋げてやれば、新しいフォルダ名が得られます。
前節で作った「make_footer.bat」ファイルを「make_newname.bat」という名前でコピーしてこれを編集していきましょう。以下に、そのバッチファイルを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@echo off rem 必要な部分の切り出し rem 「日付」について set YYYY=%date:~0,4% set MM=%date:~5,2% set DD=%date:~8,2% rem 「時刻」について set HH=%time:~0,2% set pp=%time:~3,2% rem 切り出した文字列を結合 set footer=%YYYY%%MM%%DD%.%HH%%pp% rem 確認表示 echo %footer% rem ヘッダーとフォルダ名の結合 echo %1_%footer% |
一番下の行に、ヘッダーとフォルダ名を結合した名前を出力するコマンドを付け足しただけです。
これを、コマンドプロンプトを開き、引数にフォルダ名を指定して実行してみましょう。この段階ではフォルダ名は自由に入力して構いません。実際にフォルダが無くてもオッケーです。ここでは、「folder」という仮想のフォルダ名を引数として実行しました(下図)。
「folder_20170294.1110」のような出力が得られれば成功です。
では、今度はコピーコマンド(xcopy)で、フォルダを新しい名前でコピーしましょう。このバッチファイルを以下のように編集します。このバッチファイル名は「add_updated_info.bat」としておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@echo off rem 必要な部分の切り出し rem 「日付」について set YYYY=%date:~0,4% set MM=%date:~5,2% set DD=%date:~8,2% rem 「時刻」について set HH=%time:~0,2% set pp=%time:~3,2% rem 切り出した文字列を結合 set footer=%YYYY%%MM%%DD%.%HH%%pp% rem ヘッダーとフォルダ名の結合とコピー xcopy /i /e %1 %1_%footer% |
最後の行を「xcopy」コマンドでコピーを行う処理に変更しました。これで、バッチファイルは完成しました。
実際に使ってみる
これを実行するために、実際にフォルダを作ります。
作成したバッチファイルと同じ場所に「テスト」フォルダを作って下さい。そして、コマンドプロンプト上で、
1 |
add_updated_info.bat テスト |
と入力します。
「テスト_20170127.2134」というフォルダができれば成功です。
もっと簡単な実行方法もあります。それは、対象フォルダをバッチファイル「add_updated_info.bat」の上に乗せる方法です。フォルダをドラッグ&ドロップしてバッチファイル(add_updated_info.bat)の上に落として下さい。同様にフォルダが作られるはずです。
バッチファイルにはいくつかの実行方法が存在しますが、詳しくは「バッチファイルの様々な実行方法 -コラム-」をご覧下さい。
注意点
ここで作ったバッチファイルは読者の好きに変更して、より自分好みに仕上げてもらいたいです。「xcopy」コマンドのオプションなど改良の余地は多いでしょう。
ただし、一つだけ注意点があり、「xcopy」コマンドの第2引数で指定したコピー先フォルダ名の「%1」は必ず先頭に置いて下さい。
例えば、日付を先頭に持ってこようとして、「xcopy /e /i %footer%_%1」などとするとエラーが生じます。
それは、「%1」には絶対パスが入るからなのですが、詳しくは「バッチファイルの様々な実行方法 -コラム-」が参考になるかもしれません。
なにか不明な点があれば、いつでもこちらからお待ちしています → 「お問い合わせ」。