PowerShell: フォルダをコピーする(上書きや階層ごと)

PowerShellでフォルダをコピーする場合、 ファイルと同じくCopy-Itemコマンドレットを使います。 オプションを指定することで強制的に上書きしたり、 フォルダの階層ごとコピーすることも出来ます。
(関連記事:ファイルのコピー

Copy-Itemでフォルダをコピーする場合の書式は次の通りです。

書式
Copy-Item コピー元のフォルダパス コピー先のフォルダパス

フォルダをコピーする場合「コピー先のフォルダ」の有無によって結果が異なるため 注意が必要です。

例えば、次のようにコピー元を「D:\temp\f1」、 コピー先を「D:\temp\f2」とする場合で検証してみます。

Copy-Item D:\temp\f1 D:\temp\f2

コピー先の「D:\temp\f2」が存在しない場合はフォルダf1をフォルダf2としてコピーします。 つまり「D:\temp」の直下にフォルダf1とフォルダf2が存在することになります。

D:\temp
├ f1
└ f2

一方、コピー先の「D:\temp\f2」が存在する場合、エラーが発生します。
強制的に上書きするために-Forceオプションを指定します。

Copy-Item D:\temp\f1 D:\temp\f2 -Force

この場合「D:\temp\f2」の下にフォルダf1を作成します。 つまり「D:\temp\f2\f1」が作成されます。

D:\temp
└ f2
  └ f1

このようにコピー先のフォルダ有無によって動作が違ってくるため注意してください。

階層ごと再帰的にコピー

ファイルやサブフォルダも含めて 階層ごと再帰的にコピーするには-Recurseオプションを指定します。

Copy-Item D:\temp\f1 D:\temp\f2 -Force -Recurse

このように指定すると、 フォルダf2が存在する場合、 f2の下にf1の内容が階層ごと再帰的にコピーされます。 f2が存在しない場合は「D:\temp」の下に「D:temp\f2」として f1の内容がコピーされます。

定期的なバックアップ業務としてCopy-Itemコマンドレットを使用する場合は -Forceや-Recurseを指定することになると思います。

PowerShell