コマンドプロンプトでXCOPYコマンドを使ってみる

COPYコマンドはファイルのみが対象になりますが、XCOPYコマンドは ファイルおよびフォルダ(ディレクトリ)をコピーします。

一般的な使い方としては

XCOPY コピー元 コピー先

になります。例えば以下のblogフォルダがあったとして

pictureフォルダには画像が2つ入っています。

XCOPY picture backup

コピー元にフォルダや複数ファイルを指定し、コピー先のフォルダが存在する場合、 コピー元のフォルダの中にあるファイルがコピーの対象(COPYコマンドと同じ)になります。

XCOPY picture backup\picture

コピー先(ここではbackup\picture)が存在しない場合、 F(ファイル)なのかD(ディレクトリ・フォルダ)なのか確認のメッセージが表示されます。

選択後の動きとしては以下の通りです。

  • F: コピー先の名前で単一のファイルが作成される
  • D: コピー先の名前でフォルダが作成され、その中にファイルがコピーされる

コピー元のファイルが複数ある場合は、Fを選択してしまうと 単一のファイルが作成されるので、正しくコピーされない。ということになります。

XCOPY picture backup\picture\

末尾に\を含めると、コピー先がフォルダであると認識してコピーします。 指定したフォルダが存在しない場合は作成されます。

COPYコマンドと同様、コピーしたいファイルやフォルダが存在するフォルダ以外で コマンドを実行する場合は、フルパスで指定します。

XCOPY C:\blog\picture C:\blog\backup\picture\

オプション(一部。詳細その他についてはヘルプXCOPY /?を参照)

/D:月-日-年 月-日-年で指定した日以降に変更されたファイルをコピーする。日付指定がない場合はコピー元がコピー先よりも日付が新しいファイルをコピーする
/EXCLUDE:ファイル1[+ファイル2]… 指定したファイルを除外する
/S フォルダとその配下のフォルダも含めてコピーする(空のものは除く)
/E フォルダとその配下のフォルダも含めてコピーする(空のものも含める)
/L コピーされるファイル名を表示する
/H 隠しファイルやシステムファイルもコピーする
/I コピーするファイルが複数かつコピー先が存在しない場合、コピー先をフォルダとしてコピーする
/R 読み取り専用ファイルを上書きする
/T フォルダのみをコピーする(空のものは除く)
/Y 上書き確認のメッセージを表示しない*1
/-Y 上書き確認のメッセージを表示する

以下、2つだけですがサンプルみたいなものを書いておきます。

2014/08/18 22:12 追記

id:align_centreさんからコメントいただきましたが、 フォルダについてはXCOPYコマンドを実行した時間が作成日時および更新日時になります。 元の更新日時を残したい場合はコマンドを再度実行してください。

追記ここまで

指定した日付以降に変更があったファイルをバックアップする

XCOPY *.txt backup /D:08-01-2014 /Y

特定のフォルダやその中のファイルを隠しファイルも含めてバックアップする

XCOPY blog blog-backup /E /H /I /Y

blogフォルダがblog-backupフォルダとしてコピーされました。tempフォルダは空ですが、 /Eオプションを指定しているためコピーの対象となっています。また、d.txtを隠しファイル (画像からは分かりにくいですが)にしましたが、/Hオプションによりコピーされているのが確認できます。

さらに/Dオプションで日付を指定してみたところ、

XCOPY blog blog-backup /D:08-01-2014 /E /H /I /Y

pictureフォルダは更新日時が2014年7月18日なので除外されていることを期待してしまいますが、コピーされています。 中のファイルはコピーされていません。したがって、空のフォルダに関しては日付による制御はできないみたいです。

COPYコマンドと比べるとオプションが多数あり、細かな制御が可能になるぶん、 コピーされるファイルの対象に注意すべきです。

*1:間違って上書きしないよう注意