【コマンドプロンプト】ディレクトリのコピー方法


この記事はプロモーションを含みます。

ホーム > コマンドプロンプト・バッチファイル リファレンス

Windowsのコマンドプロンプトで、ディレクトリ配下のファイルも含めて、コピーする方法を解説します。

通常の copyコマンドでは、ファイルのコピーしか行うことが出来ません。
今回は、xcopyコマンドを使って、ディレクトリのコピーを行いたいと思います。

書式

xcopyの書式になります。

xcopy コピー元ディレクトリ コピー先ディレクトリ オプション

よく使用するオプションになります。
これら以外はコマンドのヘルプで確認してください。

オプション内容
/pコピー先のファイルを作成する前に確認メッセージを表示します。
/s空のディレクトリを除く、ディレクトリとサブディレクトリをコピーします。
/e空のディレクトリを含む、ディレクトリとサブディレクトリをコピーします。
/qコピー中にファイル名を表示しません。
/fコピー中にコピー元とコピー先のフルパスを表示します。
/h隠しファイルやシステムファイルもコピーします。
/tファイルはコピーせず、ディレクトリ構造のみを作成します。
空のディレクトリ、サブディレクトリは対象外になります。
同時に[/e]も指定することで、空ディレクトリ、サブディレクトリも作成されます。
/y上書き確認のメッセージを表示しません。
/?コマンドのヘルプを表示します。

サンプルと解説

様々なディレクトリ構成、オプションを使用したサンプルとコピー時の動きの解説です。
コピー前後のファイルの白文字が既存ファイル黄色文字がコピーされたファイルです。

シンプルなコピー

単純にディレクトリをコピーするサンプルです。(サブディレクトリはコピーされません)
コピー元のディレクトリ直下にあるファイルがコピー対象となります。
ファイルかディレクトリの確認では「d」(ディレクトリ)を入力します。
(コピー先のディレクトリ[folder2]が存在する場合は、確認メッセージは表示されません)

コマンド
C:\workspace\cmd>xcopy folder1 folder2
folder2 は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? d
folder1\file1.txt
1 個のファイルをコピーしました
コピー前のファイル
C:\workspace\cmd\folder1\file1.txt
コピー後のファイル
C:\workspace\cmd\folder1\file1.txt

C:\workspace\cmd\folder2\file1.txt

[folder1]が[folder2]としてコピーされていることが分かります。

ここで注意が必要なポイントがあります。
xcopy実行時に「folder2 は受け側のファイル名ですか」と確認ダイアログが表示されます。
単純にディレクトリとしてコピーを行う場合は、「d(ディレクトリ)」を選択する必要があります。
「f(ファイル)」を選択すると、ディレクトリ内(サンプルであれば[folder1])にあるファイルが[folder2]というファイル名でコピーされてしまいます。

下記のように、echoを組み合わせることで自動的に「d」を入力させることも可能です。

echo d | xcopy folder1 folder2

サブディレクトリを含めたコピー(空ディレクトリ含む)

サブディレクトリ(配下のファイルを含む)を含めたコピーのサンプルです。
また、コピー元に空のディレクトリがある場合もコピーされます。

コマンド
C:\workspace\cmd>xcopy folder1 folder2 /e
folder1\file1.txt
folder1\subFolder1\subFile1.txt
2 個のファイルをコピーしました
コピー前のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
コピー後のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
C:\workspace\cmd\folder2\file1.txt
C:\workspace\cmd\folder2\subFolder1
C:\workspace\cmd\folder2\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

このサンプルでは、コピー元の[folder1]直下にあるファイルに含めて、サブディレクトリの[subFolder1]、空のサブディレクトリ[subFolder2]もコピーされていることが確認出来ます。

サブディレクトリを含めたコピー(空ディレクトリ除く)

サブディレクトリ(配下のファイルを含む)を含めたコピーのサンプルです。
また、コピー元の空ディレクトリはコピーされません。

コマンド
C:\workspace\cmd>xcopy folder1 folder2 /s
folder1\file1.txt
folder1\subFolder1\subFile1.txt
2 個のファイルをコピーしました
コピー前のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
コピー後のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
C:\workspace\cmd\folder2\file1.txt
C:\workspace\cmd\folder2\subFolder1
C:\workspace\cmd\folder2\subFolder1\subFile1.txt

このサンプルでは、コピー元の[folder1]直下にあるファイルに含めて、サブディレクトリの[subFolder1]がコピーされ、空のサブディレクトリ[subFolder2]がコピーされていないことが確認出来ます。

ディレクトリ構造をコピーする(空、サブディレクトリ含む)

ファイルはコピーせずに、コピー元のディレクトリ構造をコピー先に作成するサンプルです。

コマンド
C:\workspace\cmd>xcopy folder1 folder2 /t /e
コピー前のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
コピー後のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
C:\workspace\cmd\folder2\subFolder1
C:\workspace\cmd\folder2\subFolder2

このサンプルでは、コピー元の[folder1]のファイルが含まれているサブディレクトリ[subFolder1]と、空のサブディレクトリ[subFolder2]がコピーされていることが確認出来ます。

バッチ処理(自動処理)などに使えるコピー

バッチ処理や自動処理を行う場合、処理中に対話を含めると処理が止まってしまいます。
なので、対話を行わないようにコピーするサンプルになります。
コピー時のオプションは下記になります。
・コピー元の空ディレクトリ、サブディレクトリを含む、ファイル全てをコピー
・コピー先のディレクトリが存在しない場合は作成する
・上書き時に確認メッセージを表示しない
・コピーしたファイルのフルパス情報をログ(xcopy.log)に出力

コマンド
C:\workspace\cmd>echo d | xcopy folder1 folder2 /e /f /y > .\xcopy.log
コピー前のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
コピー後のファイル
C:\workspace\cmd\folder1
C:\workspace\cmd\folder1\file1.txt
C:\workspace\cmd\folder1\subFolder1
C:\workspace\cmd\folder1\subFolder1\subFile1.txt
C:\workspace\cmd\folder1\subFolder2

C:\workspace\cmd\folder2
C:\workspace\cmd\folder2\file1.txt
C:\workspace\cmd\folder2\subFolder1
C:\workspace\cmd\folder2\subFolder1\subFile1.txt
C:\workspace\cmd\folder2\subFolder2

記事は以上です。Windowsのコマンドプロンプトでディレクトリをコピーする際、xcopyは必須になると思います。また、バッチファイル(.bat)に組み込む際もよく使うコマンドだと思いますので、しっかりマスターしておきましょう。

関連記事

ファイルのコピー

コメント

タイトルとURLをコピーしました