Xcopyを使用したファイルとフォルダーのコピーの究極のガイド

Xcopyツールは、拡張コピーを意味し、Windowsで大量のデータをコピーするための人気のあるコマンドラインユーティリティです。従来のcopyコマンドと比較して、Xcopyにはより多くの機能とスイッチがあり、ファイルやフォルダーのコピーまたは移動時により良い制御が可能です。

このガイドでは、さまざまなファイルコピーのシナリオでXcopyを使用する方法について学びます。単一のファイル、複数のディレクトリ、フィルターの適用や除外など。最後には、日常のファイルコピーのタスクでXcopyを使用する知識を得ることができます。

さあ、始めましょう!

前提条件

このガイドの例に従うには、次のものが必要です。

  • A Windows (server or client) computer. Xcopy comes built-in to Windows, and you don’t need to download anything else. This guide will use Windows 10 Build 1909.
  • XcopyはコマンドプロンプトまたはPowerShellで動作し、この記事ではすでに1つが開いていることを前提としています。

Xcopyコマンドの理解

Xcopyは、Windows 98以降でデフォルトで提供されているコマンドラインユーティリティです。このツールは、%WINDIR%\system32フォルダーの下にあり、実行可能ファイルの名前はxcopy.exeです。

Windowsのcopyコマンドと比較して、Xcopyはファイルとディレクトリのコピーがはるかに効率的です。さらに、Xcopyにはファイルコピーの動作を制御できるようにするオプションがさらに多くあります。

利点

Xcopyの利用にはいくつかの利点やメリットがあります。このガイドを進めるにつれて学んでいくことでしょう。以下は、Xcopyを使用することの利点の一部です。

  • 大量のファイルやディレクトリの高速コピー操作。
  • アプリケーションの展開を簡素化
  • ソースディレクトリ構造のレプリケーションが可能。
  • 所有者とアクセス制御リスト(ACL)情報を保持したままファイルをコピー。
  • 読み取り専用ファイルをコピーして上書き。
  • ファイル名、拡張子、またはパスに基づいてファイルを除外できる。
  • 更新されたファイルを識別でき、差分バックアップに役立つ。
  • スクリプトと統合して使用できる。

制限事項

Xcopyは素晴らしいツールですが、制限もあります。これらの制限が問題ではないかもしれませんが、潜り込む前にそれらを知っておくことは良いでしょう。

  • 開いているファイルをコピーできません。
  • Windows Volume Shadow Copy Service(VSS)のサポートがありません。VSSのサポートがないため、Xcopyはライブオペレーティングシステムのボリュームのバックアップに適していません。
  • パスとファイル名の長さが254文字を超えると不十分なメモリエラーが発生します。

Xcopy 構文リファレンス

Xcopyを使用すると、さまざまなファイルおよびフォルダーのコピー操作を実行できます。ただし、まずはその構文とオプションを理解する必要があります。Xcopyの動作を変更するさまざまなオプションがあります。これらのオプションを理解するのに役立つように、以下の表で詳細に説明します。

最初のパス指定はソースファイルを示し、2番目のパス指定は宛先ファイルを示します。

xcopy [source] [destination] [options]
  • [source] – コピーするファイルのパス名(ワイルドカードを受け入れます)。ドライブ、パス、およびコピーしたいファイルを指定する必要があります。
  • [destination] – 新しいファイルのパス名。宛先パスを指定しない場合、コマンドはファイルをソースと同じパスにコピーします。
  • [options] – 以下の表に示すオプションのいずれかを指定できます。これらのオプションは、xcopy /?コマンドを実行するか、Xcopyオンラインドキュメントを参照することでも表示できます。

ソースオプション

Switch Explanation
/A Copy files that have the archive attribute.
/M Copy files with the archive attribute set, then switches off the archive attribute at the destination. Use this option when creating routine backups.
/H Copy hidden and system files and directories. The default value is N.
/D:mm-dd-yyyy Only copies that files with modification date on or after the given date. Without using this option, the command will copy only the files whose date/time is newer than the destination.
/U Only copies the files that already exists at the destination.
/S Copies folders and subfolders recursively excluding the empty one.
/E Copies folders and subfolders recursively including the empty one.
/EXCLUDE:file1[+file2][+file3]… Specify the text file(s) containing a list of strings to match absolute file paths to exclude.

宛先オプション

Switch Explanation
/I If the destination does not exist, using this option assumes that the destination is a directory and creates it. If you omit this option, the command prompts to confirm if the destination is a directory or a file.
/R Overwrites read-only files.
/T Creates a recursive folder structure at the destination without copying the files. This option does not include copying empty folders. To include empty folders, use this option together with the /E option.
/K Preserves the file attributes during the copy. Otherwise, the command will reset read-only attributes.
/N Copies files using their short file names.
/O Copies files including ownership and access control list (ACL) information.
/X Copies files including file audit settings and ACL information (implies using /O).

コピーオプション

Switch Explanation
/W Prompts for a key press before the copy process can start.
/P Prompts (Y/N) before creating each file.
/Y Suppresses the confirmation to overwrite destination file if exists.
/-Y Prompts to confirm overwriting an existing destination file.
/V Verifies that the source and destination file sizes are identical.
/C Ignores errors and forces the command to continue copying.
/B Copies only the symbolic link but not the link target file.
/G Copies encrypted files to a destination that does not support encryption.
/J Copies files without using the buffer. This switch useful when copying very large files.
/Q Suppresses the display of file names while copying.
/F Displays the full source and destination file paths while copying.
/L Only displays which files to copy without copying them. This switch can be useful when testing Xcopy commands with multiple options to assess the expected result.
/Z Copies files in restartable mode. Using this option, the command gracefully stops copying files during network interruption. The copying will resume after re-estabslishing the network connection.

Xcopyの使用方法:使用例

Xcopyの構文とオプションに慣れたら、1つまたは複数のオプションを組み合わせて実際に使用を開始する時が来ました。次のセクションでは、ファイルやフォルダーをコピーするためにXcopyを使用するさまざまなシナリオを探索します。

コピーするファイルの一覧

巨大なファイルを含むファイルサーバーをコピーする場合、まずXcopyコマンドをテストすることが理想的です。複数のXcopyオプションを組み合わせる場合には、Xcopyのテストが必要です。

Xcopyに/Lスイッチを使用すると、コマンドを実行した際にコピーされるファイルをリストアップすることで、コマンドが意図した通りにすべてのファイルをコピーするかどうかを確認できます。

XCOPY C:\Workarea\XCopyDemo C:\Workarea\XCopyDemoFolder /L

単一のファイルのコピー

Xcopyで行える最も基本的な操作は、オプションを使用せずにソースから宛先にファイルをコピーすることです。例えば、以下のコマンドはテキストファイルを宛先ディレクトリにコピーし、ファイル名は同じになります。

XCOPY C:\Workarea\XCopyDemo\NewFile.txt C:\Workarea\XCopyDemoFolder

以下のコマンドを実行することで、ソースファイルをコピーして宛先ファイル名を変更することもできます。

XCOPY C:\Workarea\XCopyDemo\NewFile.txt C:\Workarea\XCopyDemoFolder\AnotherFile.txt

新しいフォルダへのファイルのコピー

Xcopyを使用すると、ファイルをコピーしながら宛先ディレクトリを作成することができます。そのためには、Xcopyコマンドに/Iオプションを追加する必要があります。

例えば、以下のコマンドはC:\Workarea\DemoフォルダのファイルをD:\Workareaフォルダにコピーします。宛先フォルダが存在しない場合、Xcopyは/Iオプションを使用して宛先フォルダを作成します。

XCOPY C:\Workarea\Demo D:\Workarea /I

すべてのファイルとフォルダを再帰的にコピーする

フォルダを他のフォルダにコピーするだけでなく、Xcopyはフォルダとファイルを再帰的にコピーすることも可能です。そして、空のフォルダの有無に関係なく再帰的なコピーを行うことができます。

すべてのファイルとディレクトリをコピーし、空のディレクトリを無視するには、Xcopyコマンドの末尾に/Sオプションを追加します。以下に示すように。

XCOPY C: D: /S

一方、再帰的なコピー中に空のディレクトリを含めるには、代わりにコマンドに/Eオプションを追加します。

XCOPY C: D: /E

隠しファイルとシステムファイルを含める

Xcopyは、デフォルトでは隠しファイルやシステムファイルをコピー操作に含みません。しかし、Xcopyに隠しファイルやシステムファイルを含める必要がある場合は、コマンドに/Hスイッチを追加します。

以下のコマンドは、隠しファイルとシステムファイルを含めてファイルを再帰的にコピーします。このコマンドはまた、エラーを無視し、宛先フォルダを作成し、既存のファイルを上書きします。

XCOPY C:\Workarea\Documents D:\Workarea\Documents /S /H /C /Y

読み取り専用ファイル属性を保持する

Xcopyが処理し保持できる属性の1つは、ファイルの読み取り専用属性です。デフォルトでは、Xcopyが読み取り専用ファイルをコピーすると、宛先でファイルの読み取り専用属性を削除します。Xcopyに読み取り専用属性を削除させないようにするには、コマンドに/Kスイッチを追加します。

たとえば、以下のコマンドは、読み取り専用ファイルを別の場所にコピーし、結果の宛先ファイルは引き続き読み取り専用属性を持ちます。このコマンドは、ファイルが存在する場合には宛先ファイルを上書きします。

XCOPY C:\Workarea\XCopyDemo\NewFile.txt D:\Workarea /I /K /Y

読み取り専用としてファイルを保持する副作用として、Xcopyは将来のコピー操作で同じファイルを上書きすることができません。ただし、/Rスイッチを追加することで、Xcopyに読み取り専用ファイルを上書きさせることができます。

XCOPY C:\Workarea\XCopyDemo\NewFile.txt D:\Workarea /K /R /Y

コピーするファイルをフィルタリング

たとえば、ソースフォルダとサブフォルダに複数のファイルがあるとしましょう。Xcopyを使用すると、ファイルのコピーをフィルタリングするためにワイルドカードを入力できます。

例えば、次のコマンドは、C: ドライブのルートからE: ドライブのルートに再帰的に.cs 拡張子のファイルのみをコピーします。このコマンドはエラーを無視し、確認を求めずに既存のファイルを上書きします。

XCOPY C:\*.cs E:\ /S /C /Y

コピーからファイルとフォルダを除外

A powerful feature of Xcopy is its ability to exclude files from the copy process. To use this feature, you can leverage the /EXCLUDE switch. This switch accepts the names of the file(s) that contain the exclusion lists.

まず、除外リストを含むファイルを作成または持っている必要があります。たとえば、Exclude.txt という名前のテキストファイルに次のエントリを含めることができます。除外ファイルには特定のファイル名、ファイル拡張子、およびフォルダをエントリとして含めることができます。

xyz.txt
Exclude.txt
.pdf
.png
\exclude\

Xcopyを除外付きで実行するには、次のコマンドを実行し、/EXCLUDE スイッチに除外ファイルの完全なパスを指定します。このコマンドではC:\Workarea\XCopyDemo\Exclude.txt ファイルが使用されます。

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /S /Y /Exclude:C:\Workarea\XCopyDemo\Exclude.txt

結果は? Xcopyはファイルをコピーしますが、xyz.txtExclude.txt.pdfおよび.png拡張子を持つすべてのファイル、excludeディレクトリ内のすべてのファイルはスキップされます。

差分コピーの実行

ファイルをバックアップする必要がある場合、Xcopyには差分バックアップを実行するオプションがあります。すべてのファイルをコピーする代わりに、差分バックアップは変更された日付が指定した日付以降のファイルのみをコピーします。/D:m-d-y スイッチに指定することができます。

例えば、変更日が2021年4月1日以降のファイルのみをコピーするには、以下のコマンドを実行してください。さらに、このコマンドは再帰的にコピーを実行し、エラーを無視し、宛先の既存のファイルを上書きします。

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /D:04-01-2021 /S /C /Y

/Dオプションで日付を指定しない場合、Xcopyは宛先のファイルより新しいソースファイルのみをコピーします。

アーカイブ属性に基づいたファイルのコピー

通常、バックアッププログラムはバックアップ操作後にファイルのアーカイブ属性を削除します。ファイルを変更した後(すなわち、編集して保存した後)、Windowsは自動的にファイルのアーカイブ属性をリセットします。

Xcopyを使用してファイルをバックアップするスクリプトを作成する場合、アーカイブ属性を使用してファイルをコピーするかバックアップするかを判断できます。

アーカイブ属性を持つファイルをコピーするには、/Aおよび/Mスイッチを活用できます。どちらのスイッチを使用するかは、ファイルのアーカイブ属性を保持するかどうかに依存します。

次のコマンドは、アーカイブ属性を持つファイルを再帰的にコピーします。宛先のファイルは/Aスイッチによりコピー後もアーカイブ属性を保持します。

XCOPY C:\Workarea\Demo D:\Workarea\Test /A /S /Y

対照的に、ソースファイルのアーカイブ属性をコピー後に宛先から削除するには、代わりに/Mスイッチを指定します。

XCOPY C:\Workarea\Demo D:\Workarea\Test /M /S /Y

ファイルの所有者とACL情報の保持

プロファイルフォルダ全体のバックアップを作成することを想像してください。各ファイルには異なる所有者または固有の権限があるかもしれません。これらのファイルを復元する必要がある場合は、同じ所有者と権限を維持したいと思うでしょう。

この方法では、全プロセスがシームレスに見え、ユーザーは以前と同じファイルへのアクセス権を維持します。ただし、まず、既存の所有者とアクセス権を保持しながらこれらのファイルをバックアップしていることを確認する必要があります。

ファイルをコピーして所有者およびACL情報を保持するには、以下に示すように、xcopyコマンドに/Oパラメータを追加します。

XCOPY C:\Workarea D:\Work /O /I /Y

所有者およびACL情報を保持するだけでなく、ファイルの監査設定も含めることができます。ファイルの監査設定をコピーすることは、組織がファイルを監査するためにグループポリシーオブジェクト(GPO)を適用している場合に役立ちます。

Xcopyでファイルをコピーする際にファイルの監査設定を含めるには、/Xスイッチを使用します。 /Xスイッチには、/Oスイッチも含まれるため、両方のスイッチを同時に使用する必要はありません。

XCOPY C:\Workarea D:\Work /X /I /Y

ネットワークを介してファイルとフォルダをコピーする

Xcopyは、同じディスクまたは異なるディスク上の場所間でファイルをコピーするだけでなく、ネットワークを介してファイルをコピーすることもできます。残念ながら、ネットワークを介したファイルのコピーは常に信頼性がありません。ネットワーク接続は断続的な中断や、いくつかの場合には完全な接続喪失に苦しむことがあります。

幸いなことに、Xcopyを再起動可能モードで実行できます。つまり、ネットワークエラーによりコピーが停止しても、ネットワーク接続を再確立した後にコピーを再開できます。Xcopyを再起動可能モードで実行するには、コマンドに/Zスイッチを追加する必要があります。

たとえば、以下のコマンドはC:\Workareaフォルダからネットワーク上の場所に再帰的にファイルをコピーします。 /ZパラメータはXcopyを再起動可能モードで実行します。

XCOPY C:\Workarea "\\SERVER01\Backup" /S /Z

/Zスイッチを使用すると、Xcopyはファイルコピーの進捗状況をパーセンテージで表示します。

バッファを使用しないI/Oを使用してファイルをコピーする

バッファされたI/Oは、オペレーティングシステムがファイルシステムキャッシュ内でのディスクの読み取りと書き込みをバッファリングする方法に対応しています。バッファリングは、同じファイルへの後続の読み取りと書き込みを高速化しますが、コストがかかります。その結果、大きなファイルをコピーする場合には、バッファリングされていないI/O(または生のファイルコピー)が好ましいメソッドです。

私の翻訳エンジンは、以下のようになります。

このコピー手法は、ファイルシステムのキャッシュオーバーヘッドを削減し、大量のファイルデータで簡単にフラッシュされるのを防ぎます。

非バッファードI/Oを使用して大きなファイルをコピーするには、以下に示すようにXcopyコマンドに/Jスイッチを追加できます。

XCOPY C:\Workarea\abc.mp4 D:\Temp /I /J

検証付きファイルのコピー

ファイルのコピーも他のタスクと同様に、常に100%の成功を返すわけではありません。いくつかのファイルは、見えないエラーがなくても転送中に破損する可能性があります。

Xcopyでは、コピー後にサイズを基に宛先とソースファイルが同一であることを確認するために/Vスイッチを使用できます。同一のソースと宛先のファイルは、コピーが成功しファイルが健全であることを示します。

以下のコマンドは、/Vスイッチを使用してC:\Workarea\XCopyDemoからすべてのファイルをC:\Workarea\Backupにコピーし、各ファイルを検証します。/Fスイッチはソースと宛先ファイルのフルパスを表示します。

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /F /H /S /X /V

暗号化ファイルのコピー

Xcopyは暗号化されたファイルを、暗号化をサポートしていない宛先にコピーすることもサポートしています。/Gスイッチを使用すると、Xcopyは暗号化されたソースファイルをコピーし、復号化された宛先ファイルを作成します。

このコピーモードは、特にネットワーク共有や非Encrypting File System (EFS)ボリュームへの暗号化ファイルのバックアップ時に役立ちます。

Xcopy C:\Workarea\XCOPYDemo C:\Workarea\XCOPYDemoFolder /S /G

フォルダ構造のコピー

いくつかの状況では、バックアップスクリプトやプログラムは、ファイルをソースからコピーする前に宛先を事前に準備する必要がある場合があります。必要な場合は、Xcopyを使用してソースフォルダの構造をコピーせずにレプリケートできます。

そのためには、Xcopyコマンドを/Tスイッチとともに実行します。/Tスイッチを使用すると、Xcopyは宛先にディレクトリツリー構造のみをコピーしますが、空のディレクトリは無視します。

/Eスイッチをコマンドに追加して、空のディレクトリも含めることもできます。以下に例示されているようにです。

Xcopy C:\Workarea\XCOPYDemo C:\Workarea\XCOPYDemoFolder /T /E

一般的なエラー

何かがうまくいかない場合、おそらくそれは実際にうまくいかないでしょう。ボリュームに関係なくファイルをコピーする場合も同様です。以下は、遭遇するかもしれない一般的なXcopyエラーです。

パラメーターの数が無効です

このエラーは、入力したコマンドにスペース文字が含まれている場合に通常発生します。このエラーを回避するには、スペース文字を含むソースまたは宛先パスを入力するときは、パスを二重引用符で囲む必要があります。

たとえば、パスがC:\Documents and Settingsの場合、パスは“C:\Documents and Settings”として入力します。

サイクリックコピーを実行できません

このエラーは、コピーしているソースディレクトリに対象ディレクトリも含まれている場合に発生します。この場合、Xcopyはループに入り、エラーが発生します。Xcopyを使用する場合、すべてのディレクトリとサブディレクトリをコピーする場合、宛先は完全に独立したディレクトリまたはディスクでなければなりません。

解析エラー

このエラーは、コマンドに間違ったまたは無効な構文が入力された場合に発生します。例えば、パスを引用符で指定しているが終了引用符が抜けている場合にこのエラーが発生することがあります。

以下のコマンドは、宛先パスに閉じる二重引用符が抜けている例です。

Xcopy C:\Workarea "C:\Workarea\XCopy Demo /S /I /E /Y

終了コード

Xcopyは、操作の結果を示す終了コードを返します。終了コードは、タスクやスクリプトが受け取った終了コードに基づいてアクションを実行する場合に特に役立ちます。

コマンドシェルは、終了コードを%ErrorLevel%変数に保存します。その後、コードはこの変数の値を調べて、Xcopy操作の結果を判断することができます。

以下は、すべてのXcopy終了コードをリストアップした表です。

Exit Code Purpose
0 This exit code means that there were no errors.
1 This exit code means that Xcopy did not find any files to copy.
2 This exit code means that the Xcopy was terminated by pressing CTRL+C.
4 This exit code means that an initialization error happened either because of insufficient memory or disk space or because you’ve entered invalid syntax.
5 This exit code means that there was a disk write error.

Xcopyを使用したスクリプトの作成

Xcopyを対話的に使用するだけでなく、スクリプトでタスクを自動化する場合には、その利点をより活用することができます。以下に、Xcopyをスクリプトで使用する例をいくつか示します。

エラーハンドリングを備えたXcopyバッチスクリプト

この例のバッチスクリプトは、エラーハンドリングロジックを備えてすべてのファイルを再帰的にコピーします。そして、エラーや終了コードに基づいて、スクリプトはエラーの理由を示すメッセージを返します。

バッチファイルを作成するには、お好みのテキストまたはコードエディタを開き、以下のコードをコピーし、エディタに貼り付け、ファイル名をcopycomplete.batとして保存します。

@echo off
rem This batch file copies all source
rem files in all directories and sub-directories from the source
rem path (%1) to the destination path (%2)

xcopy %1 %2 /s /e

if errorlevel 4 goto lowmemory
if errorlevel 2 goto abort
if errorlevel 0 goto exit

:lowmemory
echo Insufficient memory to copy files or
echo invalid drive or command-line syntax.
goto exit

:abort
echo You pressed CTRL+C keys due to which the copy operation has been aborted.
goto exit

:exit

次に、スクリプトを実行するには、コマンドプロンプトまたはPowerShellでその名前を呼び出し、ソースフォルダと宛先フォルダを指定します。

pycomplete.bat xcopydemo xcopydemofolder
Running an Xcopy batch file

データを移動するためのXcopyバッチスクリプト

Xcopyには、ソースから宛先へのファイルとフォルダの移動機能はありません。しかし、回避策として、最初にファイルをXcopyし、その後ソースからファイルを削除するスクリプトを作成することができます。

以下のコードは、ファイルを宛先にコピーします。コピーのプロセスが成功した場合、スクリプトはソースのファイルを削除します。以下のコードをコピーして、movefiles.batという新しいファイルに保存してください。

Rem Batch file to move files

Xcopy /D /V %1 %2

Rem If the Xcopy process is successful (0), then delete the files at the source.
if errorlevel 0 (
echo Xcopy process completed successfully
del /Q %1
exit /B
)

Rem Errorlevel is not 0
echo The copy process has failed.

次に、movefiles.batバッチファイルを実行するには、前の例と同様に、コマンドプロンプトまたはPowerShellでその名前を呼び出した後にソースと宛先のパスを入力します。

movefiles.bat xcopydemo xcopydemofolder

結論

大量のファイルをコピーしたり、ファイルのバックアップを作成したりする仕事であれば、Xcopyは要件に合わせて動作をカスタマイズするための多くのオプションを備えた正確で高速なファイルコピーツールです。

Source:
https://adamtheautomator.com/xcopy/