この記事では、PowerShellでのファイルコピーを効率化するために使われるxcopyコマンドについて説明します。
xcopyコマンドとは?
xcopyは、Windowsのコマンドプロンプト(cmd.exe)で使用されるファイルおよびディレクトリコピーのためのコマンドです。copyコマンドと比較して、より多機能で、大量のファイルや複雑なディレクトリ構造をコピーするのに適しています。
参考: xcopy |Microsoft Learn
xcopyの基本構文
xcopy <source> <destination> [options]
<source>: コピー元のファイルまたはディレクトリ
<destination>: コピー先のディレクトリ
※<destination> を省略すると、現在のディレクトリーにコピーします
[options]: 各種オプション(省略可能)
xcopyは以下のように動作します。
コピー元 | コピー先 | 実行動作 |
存在する | 存在する | コピー元でコピー先を上書き |
存在する | 存在しない | コピーする |
存在しない | 存在する | コピー先ファイルは残す |
xcopyの基本的な使い方
単純なコピー
最も基本的な使い方は、ファイルやディレクトリのコピーです。
以下のコマンドは、C:\sourceディレクトリ内の全ファイルとサブディレクトリをD:\destinationにコピーします。
$source = "C:\source"
$destination = "D:\destination"
xcopy $source $destination
再帰的なコピー
/sオプションを使用すると、空のディレクトリを除くすべてのサブディレクトリを再帰的にコピーできます。
$source = "C:\source"
$destination = "D:\destination"
$xcopyOptions = "/s"
xcopy $source $destination $xcopyOptions
隠しファイルやシステムファイルのコピー
/hオプションを使用すると、隠しファイルやシステムファイルもコピーできます。
$source = "C:\source"
$destination = "D:\destination"
$xcopyOptions = "/h"
xcopy $source $destination $xcopyOptions
更新されたファイルのみをコピー
/dオプションを使用すると、指定された日付以降に変更されたファイルのみをコピーします。日付を指定しない場合、既存のファイルより新しいファイルだけがコピーされます。
$source = "C:\source"
$destination = "D:\destination"
$xcopyOptions = "/d"
xcopy $source $destination $xcopyOptions
空のディレクトリもコピー
/eオプションを使用すると、空のディレクトリも含めてコピーできます。
$source = "C:\source"
$destination = "D:\destination"
$xcopyOptions = "/e"
xcopy $source $destination $xcopyOptions
複数のオプション
オプションは複数指定することもできます。
$source = "C:\source"
$destination = "D:\destination"
$xcopyOptions = "/s /e /h"
xcopy $source $destination $xcopyOptions
このスクリプトは、C:\sourceからD:\destinationにファイルを再帰的にコピーし、空のディレクトリや隠しファイルも含めてコピーします。
エラーハンドリング
コピー中にエラーが発生した場合、エラーハンドリングを追加することも重要です。以下の例では、エラーが発生した場合にメッセージを表示します。
$source = "C:\source"
$destination = "D:\destination"
$xcopyOptions = "/s /e /h"
try {
xcopy $source $destination $xcopyOptions
Write-Output "コピーが成功しました。"
} catch {
Write-Output "コピー中にエラーが発生しました: $_"
}
まとめ
今回は、PowerShellでのxcopyコマンドの基本的な使い方について説明しました。