ファイルとディレクトリ構造のコピー(XCOPY)

XCOPY コマンドを使用するとファイルとディレクトリ構造のコピーなど高機能なコピー機能が利用できます。ここではコマンドプロンプトにおける XCOPY コマンドの使い方について解説します。

(Last modified: )

XCOPYコマンドの使い方

XCOPY コマンドは COPY 機能と似ていますが、より高機能なコピー機能を利用することができます。書式は次の通りです。

XCOPY コピー元 [コピー先] [/A | /M] [/D[:日付]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]
[/EXCLUDE:ファイル1[+ファイル2][+ファイル3]...]

多くのオプションが用意されていますが、この中から知っておくと便利だと思われる使い方について解説していきます。

ファイルをコピーする

COPY コマンドと同じようにファイルをコピーする場合にも XCOPY コマンドは利用できます。例えばカレントディレクトリにある memo.txt を同じディレクトリ内の memo_back.txt としてコピーするには次のように実行します。

xcopy memo.txt memo_back.txt

XCOPYコマンドを実行すると「memo_back.txt は受け側のファイル名ですか、またはディレクトリ名ですか (F= ファイル、D= ディレクトリ)?」と表示されます。

ファイルをコピーする(1)

今回はファイルなので[f]キーを押すとファイルのコピーが完了します。

ファイルをコピーする(2)

DIR コマンドを使って確認してみると、コピーされた memo_back.txt が作成されていることが確認できます。

ファイルをコピーする(3)

-- --

コピー先として存在するディレクトリ名を指定すると、同じファイル名でコピーが行われます。例えばカレントディレクトリにある memo.txt をカレントディレクトリ内の既に存在している back ディレクトリに同じ名前でコピーするには次のように実行します。

xcopy memo.txt back

ファイルをコピーする(4)

ディレクトリを指定した場合はファイルかディレクトリかの確認は行われずコピーが完了します。

back ディレクトリを確認すると、ファイルが同じ名前でコピーされていることが確認できます。

ファイルをコピーする(5)

-- --

コピー先として存在しないディレクトリ名を指定すると、ディレクトリを新規に作成した上で同じファイル名でコピーが行われます。例えばカレントディレクトリにある memo.txt を、現在は作成されていない doc ディレクトリに同じ名前でコピーするには次のように実行します。

xcopy memo.txt doc

XCOPYコマンドを実行すると「doc は受け側のファイル名ですか、またはディレクトリ名ですか (F= ファイル、D= ディレクトリ)?」と表示されます。

ファイルをコピーする(6)

今回はディレクトリなので[d]キーを押すと新しいディレクトリが作成されてファイルのコピーが完了します。

ファイルをコピーする(7)

TREE /F コマンドを使って確認してみると、新しく doc ディレクトリが作成されて、ディレクトリの中に コピー元と同じファイル名で memo.txt が作成されていることが確認できます。

ファイルをコピーする(8)

ディレクトリ構造をコピーする

XCOPY コマンドでは、「/E」オプションを付けることで、指定したディレクトリに含まれるファイルやサブディレクトリなどをまとめて別のディレクトリにコピーすることができます。

例えば c:\test\doc ディレクトリに含まれるファイルやサブディレクトリをまとめて c:\test\back ディレクトリにコピーする場合は次のように実行します。

xcopy /e c:\test\doc c:\test\back

現在 c:\test\doc ディレクトリには次のようなファイルやサブディレクトリがあります。ディレクトリの中にファイルが 2 つ、サブディレクトリが 2 つあります。サブディレクトリの一つにはファイルが 1 つあります。

ディレクトリ構造をコピーする(1)

XCOPY コマンドを実行すると、ファイルおよびディレクトリのコピーが完了します。(今回はコピー先のディレクトリが存在しているので確認が行われませんでしたが、存在しないディレクトリを指定した場合はファイル名かディレクトリ名かの確認が行われます)。

ディレクトリ構造をコピーする(2)

TREE /F コマンドを使って確認してみると、コピー先にファイルとディレクトリがコピーされていることが確認できます。

ディレクトリ構造をコピーする(3)

今回はサブディレクトの中にファイルが一つもない空のディレクトリであってもコピーされました。

空のディレクトリを除いてディレクトリ構造をコピーする

XCOPY コマンドでは、「/S」オプションを付けることで、指定したディレクトリに含まれるファイルやサブディレクトリなど空のディレクトリは除いてまとめて別のディレクトリにコピーすることができます。

例えば c:\test\doc ディレクトリに含まれるファイルやサブディレクトリを空のディレクトリは除いてまとめて d:\test\old ディレクトリにコピーする場合は次のように実行します。

xcopy /s c:\test\doc c:\test\old

c:\test\doc ディレクトリの中は先ほどと同じです。XCOPY コマンドを実行すると、今回はコピー先に指定したディレクトリが存在していないため「C:\test\old は受け側のファイル名ですか、またはディレクトリ名ですか」と表示されます。(既に存在しているディレクトリを指定した場合は、確認がなくすぐにコピーが行われます)。

空のディレクトリを除いてディレクトリ構造をコピーする(1)

今回はディレクトリなので[d]キーを押すと、新しいディレクトリが作成されてファイルとディレクトリのコピーが完了します。このとき、ファイルが一つも含まれていない空のディレクトリはコピーされません。

空のディレクトリを除いてディレクトリ構造をコピーする(2)

TREE /F コマンドを使って確認してみると、空のディレクトリを除いてコピー先にファイルとディレクトリがコピーされていることが確認できます。( private ディレクトリは空のディレクトリだったのでコピーされていません)。

空のディレクトリを除いてディレクトリ構造をコピーする(3)

このように空のディレクトリを除いてファイルとディレクトリをコピーすることができます。

ディレクトリ構造だけをコピーする

XCOPY コマンドでは、「/T」オプションを付けることで、指定したディレクトリにサブディレクトリなどディレクトリ構造だけを別のディレクトリにコピーすることができます。(空のディレクトリはコピーされません)。

例えば c:\test\doc ディレクトリに含まれるサブディレクトリの構造だけを c:\test\old ディレクトリにコピーする場合は次のように実行します。

xcopy /t c:\test\doc c:\test\old

c:\test\doc ディレクトリの中は先ほどと同じです。XCOPY コマンドを実行すると、今回はコピー先に指定したディレクトリが存在しているので、すぐにコピーが完了します。

空のディレクトリを除いてディレクトリ構造をコピーする(1)

TREE /F コマンドを使って確認してみると、空のディレクトリを除いてコピー先にディレクトリがコピーされていることが確認できます。( private ディレクトリは空のディレクトリだったのでコピーされていません)。

空のディレクトリを除いてディレクトリ構造をコピーする(2)

-- --

空のディレクトリも含めてディレクトリ構造をコピーしたい場合には、「/T」オプションに加えて「/E」オプションも付けてください。

xcopy /t /e c:\test\doc c:\test\old

c:\test\doc ディレクトリの中は先ほどと同じです。XCOPY コマンドを実行すると、今回はコピー先に指定したディレクトリが存在しているので、すぐにコピーが完了します。

空のディレクトリを除いてディレクトリ構造をコピーする(3)

TREE /F コマンドを使って確認してみると、空のディレクトリも含めてコピー先にディレクトリがコピーされていることが確認できます。

空のディレクトリを除いてディレクトリ構造をコピーする(4)

指定した日付以降に作成または更新されたファイルだけをコピーする

XCOPY コマンドでは、「/D:月-日-年」オプションを付けることで、指定した日付以降に作成または更新されたファイルだけをコピーすることができます。

例えば c:\test\doc ディレクトリに含まれるファイルの中で 2024/01/15 以降に作成または更新されたものだけを c:\test\back ディレクトリにコピーする場合は次のように実行します。

xcopy /d:1-15-2024 c:\test\doc c:\test\back

c:\test\doc ディレクトリに含まれる 3 つのファイルの中で、ファイルの作成日または更新時で条件を満たしているファイルは 2 つありました。

指定した日付以降に作成または更新されたファイルだけをコピーする(1)

XCOPY コマンドを実行すると、先ほどの条件に一致していた 2 つのファイルだけがコピーされました。

指定した日付以降に作成または更新されたファイルだけをコピーする(2)

back ディレクトリを確認してみると、 2 つのファイルだけがコピーされているのが確認できます。

指定した日付以降に作成または更新されたファイルだけをコピーする(3)

指定した文字列が含まれるファイルを除外してコピーする

XCOPY コマンドでは、「/EXCLUDE:ファイル1[+ファイル2]...」オプションを付けることで、指定した文字列が含まれるファイルを除外してコピーすることができます。例えば c:\test\doc ディレクトリに含まれるファイルの中で指定した文字列がファイル名に含まれるファイルは除外したものを c:\test\back ディレクトリにコピーする場合は次のように実行します。

xcopy /exclude:c:\test\ex.txt c:\test\doc c:\test\back

除外する文字列はファイルに記述しておき、そのファイルを「/EXCLUDE:ファイル」のように指定します。複数のファイルを指定する場合は「+」のあとに続けて記述してください。今回は c:\test\ex.txt というファイルを用意し、除外する文字列を次のように記述しました。( 1 つのファイルに複数の除外する文字列を記述する場合は、 1 行につき 1 つの文字列を記述して下さい)。

指定した文字列が含まれるファイルを除外してコピーする(1)

コピー元のディレクトリである doc ディレクトリにはあらかじめ次のような 5 つのファイルが入れてあります。

指定した文字列が含まれるファイルを除外してコピーする(2)

XCOPY コマンドを実行すると次のように 2 つのファイルがコピーされました。今回除外する文字列として「report」と「.bak」を指定したので、 5 つのファイルの中で、これらの文字列と一致しない 2 つのファイルだけがコピーされています。

指定した文字列が含まれるファイルを除外してコピーする(3)

back ディレクトリを確認してみると、 2 つのファイルだけがコピーされているのが確認できます。

指定した文字列が含まれるファイルを除外してコピーする(4)

-- --

XCOPY コマンドを使ってファイルとディレクトリ構造のコピーを行う方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。