Xcopy
ファイル/ディレクトリをコピーします。ファイルの複数コピーやディレクトリの一括コピーに対応しています。
単純な使い方
Xcopyは使用できるオプションが多いため様々なコピーの操作が可能ですが、以下のような単純なコピーを行う場合は次に示す構文を使用することができます。具体的なXcopyの構文は次のセクションにあります。
ファイル「C:\Documents\hoge.txt」を、ディレクトリ「D:\Backup」の中にコピーする場合。ただし既に存在する場合は無条件で上書きを行う。
xcopy /Y C:\Documents\hoge.txt D:\Backup\
ディレクトリ「E:\My\Directory」とその中身(ファイルおよびサブディレクトリ)を、ディレクトリ「F:\Foo\Bar」内に まるごとコピーする場合。ただし「E:\My\Directory」の中身を「F:\Foo\Bar\Directory」の中にコピーするようにし、中に含まれるファイルが一部存在する場合は無条件で上書きを行う。また、コピー時にファイル名を画面に出力しない。
xcopy /Y /Q /S /E E:\My\Directory\*.* F:\Foo\Bar\Directory\
「F:\Foo\Bar\Directory」が存在しない場合は自動的に作成されます。
ディレクトリ「E:\My\Directory」の中身のうち「アーカイブ属性」の付いたファイルおよびサブディレクトリを、ディレクトリ「F:\Foo\Bar」内にまるごとコピーする場合。ただし「E:\My\Directory」の中身を「F:\Foo\Bar」の中にコピーするようにし、中に含まれるファイルが一部存在する場合は無条件で上書きを行う。また、コピー時にファイル名を画面に出力せず、コピー元ファイルについていたアーカイブ属性は解除する。
xcopy /Y /Q /S /E /M E:\My\Directory\*.* F:\Foo\Bar\
構文
xcopy[.exe] <source> [<destination> ] [/A | /M] [/D[:<date> ]] [/P]
[/S] [/E] [/V] [/W] [/Y] [/-Y] [/C] [/I] [/Q] [/F] [/L] [/H] [/R]
[/T] [/U] [/K] [/N] [/G] [/O] [/X] [/Z] [/B] [/J]
[/EXCLUDE:<file1> [+<file2> ]...]
※各オプションの順番は「<source> [<destination> ]」の順番以外は任意です。
<source>
コピー元のファイル/ディレクトリ名を指定します。ワイルドカード による複数ファイル指定が可能です。また、「<drive> :」という指定はドライブ内にあるすべてのファイルをコピーすることを表します。なお、デバイスファイル名(CON やNUL など)は指定できません。
コピー元がディレクトリである場合、以下のファイルに関するオプションはディレクトリ内の各ファイルに対して適用されます。
[MS-DOS] <source> を「\」で終わらせることはできません。ディレクトリの中身をすべてコピーしたい場合は、対象のディレクトリ名で終わらせるか、「\*.*」のようにワイルドカードを使います。
[Window 95以降] <source> を「\」で終わらせると、そのディレクトリの中に対する「*.*」と同じ動作をします。
<destination>
コピー先のファイル/ディレクトリ名を指定します。なお、「<destination> 」に指定された名前の末尾が「\」で終わっている場合はそのディレクトリの中にコピーされますが、「\」で終わっていない場合は「<destination> は受け側のファイル名ですか、ディレクトリ名ですか(F=ファイル、D=ディレクトリ)?」というプロンプトが表示されます(これは <destination> が「file.ext」のように拡張子を含んでいる場合も入ります)。
/A
「アーカイブ属性」の付いたファイルのみをコピーします。/Mと同時に指定することはできません。
/M
「アーカイブ属性」の付いたファイルのみをコピーし、コピー元ファイルのアーカイブ属性を解除します(コピー先ファイルのアーカイブ属性は残ります)。/Aと同時に指定することはできません。
/D[:<date> ]
ファイルの日付(更新日時)が<date> 以降のファイルのみをコピーします。「:<date> 」を省略した場合はコピー元の日付がコピー先の日付より新しい場合にのみコピーが行われます。
[MS-DOS] <date> の省略はできません。また、<date> の書式はConfig.sys内のCOUNTRY指定に依存します。
[Windows NT系・Windows XP以降] <date> の書式は「月-日-年」で指定します。
/P
各ファイルのコピーを行う前に確認のプロンプトを表示します。
/S
コピー元に含まれるディレクトリ・サブディレクトリもコピーします。/Eを指定しない場合は空のディレクトリをコピーしません。
/E
コピー元に含まれるディレクトリ・サブディレクトリもコピーします。この際、コピーしようとするディレクトリが空であってもコピーします。「/S /E」は「/E」と同じ指定とみなされます。
/V
[MS-DOS, Windows NT系・Windows XP以降] ファイルをコピーする度にコピー元ファイルとコピー先ファイルが同一かどうかの検証を行います。([Windows NT系・Windows XP以降] ファイルサイズが一致するかどうかのみを検証します。)
/W
コピーを開始する前に任意のキー入力を求めるプロンプトを表示します。このプロンプトを表示させることで、Ctrl+Cによるキャンセルを行えるようにします。
/Y
コピー先のファイルが存在する場合に上書きするかどうかの確認のメッセージを表示させず、強制的に上書きするようにします。
/-Y
コピー先のファイルが存在する場合に上書きするかどうかの確認のメッセージを表示させます。(環境変数 COPYCMD で「/Y」が設定されていても表示します。)
/C
[Windows 95以降] コピー時にエラーが発生しても残りのファイルコピーを続けます。
/I
[Windows 95以降] <destination> に指定されたファイル/ディレクトリが存在しない場合、その名前をディレクトリ名として扱い、そのディレクトリ内にコピーします。
/Q
[Windows 95以降] コピー中にファイル名を表示しません(Quietモード)。
/F
[Windows 95以降] コピー中にコピー元とコピー先のファイル名をすべて表示します。
/L
[Windows 95以降] コピーしようとするファイル名をすべて表示します。ファイルのコピーは行いません。
/H
[Windows 95以降] コピー元に隠しファイル・システムファイルが含まれている場合、それらもコピーします。
/R
[Windows 95以降] コピー先に読み取り専用ファイルが存在しても、それを上書きします。
/T
[Windows 95以降] ディレクトリだけを作成し、ファイルはコピーしません(コピー元と同じディレクトリツリーを作成します)。「/E」を指定しない場合はコピー元に存在する空のディレクトリは作成されず、「/E」を指定した場合は空のディレクトリも作成されます。
/U
[Windows 95以降] コピー先のファイルを更新します。このオプションを指定すると、コピー元とコピー先に同じファイルがある場合、コピー元が古い場合はコピーされません。
/K
[Windows 95以降] コピー元の属性もコピーします。/K を指定しなかった場合は「読み取り専用」属性が解除されます。
/N
[Windows 95以降] MS-DOS 形式以外のファイル名(長いファイル名など)を持つファイルをコピーするとき、できる限り短いファイル名でコピーします。
/G
[Windows NT系・XP以降] コピー先が暗号化をサポートしていない場合でも、コピー元に含まれる暗号化されたファイルをコピーします。
/O
[Windows NT系・XP以降] ファイルの所有権およびACL情報(アクセス権など)もコピーします。
/X
[Windows NT系・XP以降] ファイルの監査設定もコピーします。/X が指定された場合は /O の意味も含みます。
/Z
[Windows NT系・XP以降] ネットワークファイルを再起動可能モード(restartable mode)でコピーします。通信不良などが発生してコピーに失敗した場合、同じファイル名を用いればコピーを再開することができます。
/B
[Windows NT系・XP以降] コピー元にシンボリックリンクがある場合、シンボリックリンクのリンク先でなく、シンボリックリンクそのものをコピーします。
/J
[Windows NT系・XP以降] コピー時にバッファされていないI/Oを使ってコピーを行います。サイズが大きいファイルをコピーする際に適しています。
/EXCLUDE:<file1> [+<file2> ]...
[Windows NT系・XP以降] 複数のファイルをコピーする際にコピーから除外したいファイルのパターンを記述したテキストファイルを指定します。このテキストファイルには、1行に1パターンの書式で、複数のパターンを記述することができます。パターンファイルは、「+」でつなげて複数指定することができます。
テキストファイルに記述するパターンは、そのパターン文字が絶対パスの一部分と一致したら除外されます。例えば、「\temp\」と記述すると、コピーするファイルが(任意の位置の)「temp」ディレクトリ内に含まれていたらコピーされなくなります。「.obj」と記述した場合は、拡張子が「.obj」のファイルや「.obj」が名前に含まれるファイルなどが除外されます。
解説
ファイルやディレクトリをコピーするプログラムで、Copy コマンドよりも詳細な指定を行うことができます。またCopyと異なり、ファイルをディレクトリごとコピーすることもできます。
Xcopyは、正常終了するとErrorlevel を0に、それ以外の場合は1以上を設定します。そのため、If を使ってエラーチェックを行うことができます。(具体的なエラーコードは不明)
[MS-DOS] Xcopyでは0バイトのファイルもコピーすることができます(Copy ではコピーできません)。
[Windows XP?以降] ファイル属性やタイムスタンプによるファイル選択やコピー元とコピー先のミラーリングなどを行う場合は、Robocopy の使用も検討してください。
例
サンプル1
xcopy /A /S /E /Y C:\MyDoc\*.* D:\Backup\MyDoc\
「C:\MyDoc」内にあるすべてのファイルのうち「アーカイブ属性」がついたファイルを、「D:\Backup\MyDoc」ディレクトリ内にコピーします。この際、「C:\MyDoc」内のサブディレクトリ内にあるファイルも(同じディレクトリ構造で)コピーします。
※ Attrib コマンドの例もご覧ください。
サンプル2
echo F | xcopy /M file1.txt file2.txt
file1.txt に「アーカイブ属性」が付いている場合、file1.txt をコピーして file2.txt を作成します。「file2.txt」は末尾が「\」で終わっていないため 、「file2.txt は受け側のファイル名ですか、ディレクトリ名ですか(F=ファイル、D=ディレクトリ)?」などの入力待ちが表示されますが、自動的に「F」を入力させるためにEcho コマンドを使用しています。
なお、コマンド実行後は file1.txt のアーカイブ属性は解除されます(file2.txt のアーカイブ属性は残ります)。
※ 単体のファイルをコピーする場合は通常Copy コマンドを使用します。
※ 「echo F」ではなく「echo D」とすると、「file2.txt」というディレクトリが作成され、その中に file1.txt がコピーされます。
※ file2.txtが存在する場合、「file2.txt は受け側のファイル名ですか、ディレクトリ名ですか(F=ファイル、D=ディレクトリ)?」ではなく「tmp2.txt を上書きしますか (Yes/No/All)?」といった入力待ちが表示される(のに対し与える入力が「F」のみとなる)ため、上記のコマンドは失敗します。強制的に上書きを行う場合は /Y スイッチを指定します。
サンプル3
xcopy /U /S /E /Y Z:\Data\*.* E:\Current\Data\
[Windows 95以降] 「Z:\Data」内のすべてのファイルを「E:\Current\Data」内にコピーしますが、コピーしようとするファイルがコピー先に存在し、コピー先のファイルが新しい場合はコピーしません。ファイルを更新するときなどに使います。
サンプル4 (バッチファイル)
@ echo off
setlocal enableextension
for /F "tokens=1,2,* delims=:" %%i in ("%TIME% ") do set MYTIME=%%i%%j
set DIR_NAME=E:\Backup\src_%DATE:/=% _%MYTIME%
if not exist "%DIR_NAME%" md "%DIR_NAME%"
xcopy /S /E /Y /Q /EXCLUDE:"E:\Backup\excludes.txt" D:\Develop\src\*.* "%DIR_NAME%\"
[Windows NT系] [拡張構文] 「E:\Backup」内に日付と時刻が名前に入ったディレクトリを作成し、その中に、「D:\Develop\src」内にあるファイルのうち「E:\Backup\excludes.txt」に記述されたパターンに一致するファイルを除くすべてのファイルをコピーします。このような記述のバッチファイルを作ることで、その時点におけるバックアップを簡単に作成することができます。
なお、ファイル名に文字「/」や「:」は使用できないため、For やSet を用いて日付や時刻からそれらの文字を取り除いています。
Copyright © 2015 Kuri-Applications.