コマンドプロンプト

XCOPYでフォルダごとコピーして現在日時を付与するバッチのサンプルスクリプト※解説あり

XCOPYの定石スクリプト

プログラマーの生産性向上に自動化はついてまわるもの。

例え初心者とはいえ。

いや!初心者こそ先に意識をして置くと、これからのエンジニア人生楽しくなるはず!

今回はコマンドプロンプトの定石とも言える

XCOPYコマンド

を使って

フォルダの中身ごとコピーしてフォルダに日付をつけてバックアップをとるサンプルスクリプトを紹介します。

コマンドプロンプト初心者にもわかるように解説もつけました。

スクリプトの紹介

先にスクリプトを紹介します。

rem /* 今日の日付を取得(yyyymmdd) */
set nowdate=%date:~0,4%%date:~5,2%%date:~8,2%
   
rem /* 今日の時刻を取得(hhmmss) */
set time2=%time: =0%
set nowtime=%time2:~0,2%%time2:~3,2%%time2:~6,2%

echo D | xcopy /E d:\勤務表 d:\backup\勤務表_%nowdate%%nowtime%

pause

上記スクリプトの

コピー元:d:\勤務表
コピー先:d:\backup\勤務表

の部分を自分がコピーしたい場所に変えてください。

このソースコードをコピーし、メモ帳に貼り付けて

拡張子を.batとすれば完成!

スクリプト解説

スクリプト解説です。

remコマンド

まず1,2行目のremはバッチファイルのなかでコメントをつける時に記述するものなので、直接動作に影響はしません。

XCOPYコマンド

メインとなるのは8行目の

echo D | xcopy /E d:\勤務表 d:\backup\勤務表_%nowdate%%nowtime%

です。

XCOPYの基本構文は

XCOPY基本構文

XCOPY コピー元 コピー先

です。

コピー先で指定したフォルダの中身ごとコピーをしてくれます。

コピーしてくれるコマンドです。

ちなみにファイルを指定してもコピーしてくれます。

XCOPYコマンドのオプション

XCOPYコマンドの基本構文は上記の通りですが、これにオプションをつけることができます。

今回のスクリプトでいうところの

/E

がそれにあたります。

echo D | xcopy /E d:\勤務表 d:\backup\勤務表_%nowdate%%nowtime%rem /* 今日の日付を取得(yyyymmdd) */
set nowdate=%date:~0,4%%date:~5,2%%date:~8,2%

/E オプションの意味は

  • ファイルが存在しなくてもディレクトリごとコピーする

です。

他にも色々なオプションがありますので、参考リンクを紹介します。

%nowdate%、%nowtime%について

スクリプト8行目にある、

%nowdate%%nowtime%は

  • %nowdate%は現在日付用の変数
  • %nowtime%は現在時刻用の変数

です。

コマンドプロンプトでは%%に囲まれた文字は変数として扱われます。

この変数自体は何も入っていませんが、

ソース2行目では現在日付を取得して変数にセットし、

rem /* 今日の日付を取得(yyyymmdd) */
set nowdate=%date:~0,4%%date:~5,2%%date:~8,2%

ソース5、6行目では現在時刻を取得して変数にセットしています。

rem /* 今日の時刻を取得(hhmmss) */
set time2=%time: =0%
set nowtime=%time2:~0,2%%time2:~3,2%%time2:~6,2%
set nowdate=%date:~0,4%%date:~5,2%%date:~8,2%

です。

例えば実行したのが2022年7月10日 5時27分45秒の場合、

%nowdate%には20220710

%nowtime%には052745

がセットされています。

日付と時刻の算出について

日付と時刻の算出については別記事に記事を書きましたので、そちらを参照して下さい。

echo D |とは何か?

またソース8行目に戻ります。

echo D | xcopy /E d:\勤務表 d:\backup\勤務表_%nowdate%%nowtime%

にある。

echo D |

とは何かというと

XCOPYでフォルダコピーをする場合はかならず、

コマンドプロンプトから

(コピー先)は受け側のファイル名ですか、またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)?

とういうメッセージが返ってきます。

要はコマンドプロンプトは

コマンドプロンプト
コマンドプロンプト
コピーするのはファイルなのか?フォルダなのか?ファイルならF、フォルダならDを入力してね

と言っているのです。

XCOPYコマンドはファイルもフォルダも両方コピーできるので、フォルダなのかファイルなのか判別つけられないからです。

今回はフォルダなので、Dを入力させたいのですが、バッチファイルのなので、入力ができません。

そのため、

echo D |

という記載をすることにより、

「XCOPYから入力を求められたらDを入力する」

ということができるわけです。

echoと言うコマンドは

「画面に表示させる」という意味を持っています。

また、ここでポイントとなるのが、

「|」

といいう記載です。

この記載をパイプと呼んでおり、バッチファイル作成には欠かせないものになります。

バッチファイルの用途

今回紹介した、バッチファイルの用途としては

作業中のデータがまとまっているフォルダを毎日バックアップするなどの用途に私は使っています。

このスクリプトを作っておけば実行するだけで、実行した日付のバックアップファイルを作ってくれます。

さらに!

スタートアップに登録すれば起動したと同時にバックアップをとってくれます。

色々、解説しましたが最初は固いことは抜きにして、

スクリプトをコピーして動くのを実感すれば、少しずつわかってくると思います。

広告




関連記事