xcopy コマンドでエクスプローラにおけるフォルダのコピペのようなことをする

はじめに

何階層にもなっている大きめのフォルダ構成を丸ごとコピーして複数個所にペーストしたい場合を考えます。
エクスプローラ上でフォルダのコピペをすると、すべてのペースト処理が一度に並列に走ります。 複製元のサイズが小さければ気になりませんが、完了するまでに時間がかかる場合は、 一つのペースト処理が完了したら次のペーストを実行するようにしたいと思うことがあります。 しかしそれをエクスプローラ上でやるには、処理が完了したことを確認してCtrl+V というのを 人の手で繰り返し行わなければならないため面倒です。
そこでCUIコマンドを使って順次にペーストすることを自動化したいと思います。

環境

本題

ファイルとディレクトリツリーをコピーする場合はcopy コマンドではなく、xcopy コマンドを使います。
しかしこのxcopy コマンドはオプションなしでは、エクスプローラにおけるコピペのような挙動にはなりません。

$ xcopy in out
out は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)?

上記のように、確認のために処理が止まってしまいます。
この後Dキーを押せば、out フォルダが作成されますが、1階層下のファイルのコピーしかされません。
また、隠しファイルはコピーされず、読み取り専用属性のファイルはコピー先では属性が解除されてしまいます。 エクスプローラのコピペでは、これらのファイルは属性が保持されてコピーされます。
これらの問題を解決するために、以下のコマンドにすると良いかと思います。

$ xcopy in out /iehkq
19 個のファイルをコピーしました

最後の/q オプションはコピーしたファイル名を表示しないためのオプションなので、あってもなくても構いません。
ファイルの所有権やACL(アクセスコントロールリスト)情報をコピーする場合は、 /o や/x オプションが必要になるかと思いますが、今回私が遭遇したケースでは無くて事足りました。 たいていのケースでは、xcopy in out /ie で十分かもしれません。

参考

xcopyコマンドの説明は以下のコマンドで確認できます。

$ xcopy /?

オンライン上ではMicrosoft のドキュメントがあります。 docs.microsoft.com