Programming Field

Robocopy (Robust File Copy for Windows) - DOS/コマンドプロンプト コマンド一覧

[Windows Vista以降(※)] ファイル/ディレクトリのコピーを行います。CopyXcopyよりも高度なオプションを指定することができます。

※ Windows Vista以降では標準でインストールされていますが、それ以前のWindowsでもResource Kit内に含まれている場合があります(NT 4.0/2000/XPやWindows Server 2003のResource Kitに含まれます)。

使い方

Robocopy使用例

Robocopyはコピーするパスとファイル名を指定し、続けてオプションを指定する形で利用します。その構文は以下の通りです。

robocopy[.exe] <source-path> <dest-path> [<files>...] [options]

<source-path>にコピー元ディレクトリ名、<dest-path>にコピー先ディレクトリ名を指定し、そのあとにコピー元ディレクトリにあるコピーしたいファイル名(ワイルドカード可)を指定します。例えば以下のようなコマンドになります。

robocopy C:\MyDocs D:\Backup\MyDocs *.*

※ なお、<files>を指定しない場合は既定で「*.*」が使われるため、ファイル名で絞ることをしない場合は「*.*」の指定を省略できます。

Robocopyの使い方で重要な点として、豊富なオプションを使って「どのファイルをコピーする/しないか」を選択したり、コピーする情報やコピー速度などの挙動を制御したりするという点にあります。例えば「/XO」を指定すると、コピー元とコピー先に同じファイルがあったときにコピー元が古い場合はコピーしません(古いファイルを除外します)。「/MT:2」と指定するとコピーに使うスレッド数を2にします(既定が8なので減らすことになります)。具体的には以下のオプションの種類があります。

詳細は後述の「オプション」の項で紹介していますが、慣れないうちは一時ディレクトリなどを使って試しながら組み立てるのがよいと思われます(サンプルもご参照ください)。

オプション

※ 同一種類のオプションが複数指定された場合は後に指定されたオプションが使用されます。(例: 「/COPYALL /COPY:AS」と指定されている場合は「/COPY:AS」が使用されます。)

オプション一覧

基本引数

<source-path>
コピー元のファイル/ディレクトリがあるディレクトリ名を指定します。
※ ジョブファイルで記述する場合のみ、オプション「/SD」を用いて「/SD:<source-path>」として指定することもできます。
※ ジョブファイルに <source-path> 指定(または /SD 指定)がある場合はコマンドラインで <source-path> を指定することができません。
<dest-path>
ファイル/ディレクトリのコピー先であるディレクトリ名を指定します。存在しない場合はコピーするファイルが0個の場合でも新たにディレクトリが作成されます(親ディレクトリが存在しない場合はそれらも作成されます)。
※ ジョブファイルで記述する場合のみ、オプション「/DD」を用いて「/DD:<dest-path>」として指定することもできます。
※ ジョブファイルに <dest-path> 指定(または /DD 指定)がある場合はコマンドラインで <dest-path> を指定することができません。
<files>
<source-path> に存在するファイル/ディレクトリの名前を指定します。複数指定する場合はスペースで区切って名前を並べます(スペース文字の入ったファイル名は「" "」で括る必要があります)。「dir\file」のような指定方法はできず、必ず <source-path> 直下の名前を指す必要があります。また、「.」や「..」は指定できません。なお、ワイルドカードを指定することができます。
<source-path> ディレクトリ自身をコピーしたい場合は、<source-path> にその親ディレクトリを指定して <files> に該当のディレクトリ名を指定します。ルートディレクトリ(C:\ など)や共有フォルダー全体(\\somepc1\share など)をディレクトリとしてコピーすることはできないため、すべてをコピーする場合はワイルドカード指定などでその中のファイル全体をコピーする必要があります。
<files> を省略すると「*.*」が指定されたものとして処理します。
※ 各オプションの後にファイル名を指定することもできます(「/」で始まらない文字列のうち3番目以降はすべてファイル名として解釈されます)。
オプション「/IF」を用い、「/IF <files>...」として指定することもできます。ジョブファイルで記述する場合に用いられます。

オプション詳細

コピー系オプション
ディレクトリ階層の指定
/S
<files> にディレクトリが含まれる場合サブディレクトリもコピーしますが、空のディレクトリはコピーしません。Xcopyの「/S」オプションと同じです。
/E
<files> にディレクトリが含まれる場合、空のディレクトリも含めてサブディレクトリをコピーします。/S と /E が同時指定されている場合は後に来ているオプションが優先されます(「/E /S」の場合は空のディレクトリがコピーされません)。Xcopyの「/E」オプションとほぼ同じですが、オプションの指定順序にご注意ください。
※ /S と /E がいずれも存在しない場合は、<files> にディレクトリが含まれていてもディレクトリをコピーしません。
/LEV:n
/S または /E が指定されている場合、サブディレクトリの階層を指定します。n には階層を示す数値を指定します。コピー元のディレクトリ自身の階層を「1」と考え、「1」を指定するとサブディレクトリ無し、「2」を指定すると1段下のサブディレクトリまで探索します。なお、「/LEV:n」を省略するか n に「0」を指定すると制限なしとなります。
コピーする情報・ファイル削除(移動/ミラー)の指定
/COPY:flags
コピーする情報を選択します。flags にはどの情報をコピーするか以下の一覧の「文字」を組み合わせて指定します。例えば「属性」と「タイムスタンプ」をコピーしたい場合は「AT」、セキュリティ情報のみコピーしたい場合は「S」を指定します。指定しなかった場合は「DAT」が指定されたものとして処理されます。
文字意味説明
Dファイルデータファイルに書き込まれたデータをコピーします。指定されなかった場合、コピー先にファイルが存在しないとコピーがスキップされファイルが作成されません(ただし /CREATE が指定されている場合は /COPY:D が無くても 0 バイトで作成されます。またその場合、flags に指定があれば属性情報等がコピーされます)。
A属性「読み取り専用」や「アーカイブ属性」、暗号化状態などの基本的な属性情報をコピーします。ただし /CREATE が指定されている場合は暗号化状態はコピーされません。
Tタイムスタンプ「作成日時」や「更新日時」などの時刻情報をコピーします。指定しなかった場合や更新日時が一致する場合は原則コピーされませんが、「D」が指定されている場合はコピーされます(中身が同一、かつ更新日時が一致する場合はコピーされません)。
Sセキュリティ情報ユーザー別アクセス権の情報などをコピーします。ただしコピー元・コピー先がいずれも共通のセキュリティ情報をサポートしているファイルシステム(NTFSなど)である必要があります。
O所有者情報ファイル/ディレクトリの所有者情報をコピーします。ただしコピー元・コピー先がいずれも共通の所有者情報をサポートしているファイルシステム(NTFSなど)である必要があります。
U監査情報ファイル/ディレクトリに対する監査設定をコピーします。ただしコピー元・コピー先がいずれも監査設定をサポートしているファイルシステム(NTFSなど)である必要があります。また、このオプションを使用する場合は管理者権限(セキュリティ権限; SeSecurityPrivilege)が必要です。
X代替データストリームのスキップ[Windows 10 バージョン???以降] 代替データストリームをコピーしません。このオプションを指定しなかった場合、既定で代替データストリームがコピーされます。(ただし「/COPY:X」だけだとコピーされる情報がなくなるため、「/COPY:DATX」などと組み合わせることになります。)
※ 暗号化状態については、A を指定していた場合でもデータに変更がない場合コピーされません。また、コピー元が非暗号化、コピー先が暗号化の場合はコピー先の暗号化状態は解除されません。
/SEC
ファイルデータ・基本情報に加え、セキュリティ情報もコピーします。「/COPY:DATS」の指定と同じ意味です。
/COPYALL
ファイルデータとファイルに関する情報すべてをコピーします。「/COPY:DATSOU」の指定と同じ意味です。
/NOCOPY
コピーを行いません。「/PURGE」オプションと組み合わせることでコピー元に存在しないファイルの削除処理のみを行うことができます。
/DCOPY:flags
ディレクトリをコピーする際に一緒にコピーする情報を指定します。flags にはどの情報をコピーするか以下の一覧の「文字」を組み合わせて指定します。
文字意味説明
Tタイムスタンプディレクトリの作成日時をコピーします。
Dデータ[Windows 8以降] データをコピーします(既定のオプション)。D オプションが指定されているとディレクトリの代替データストリームがコピーされます(指定されていない場合はコピーされません)。
A属性[Windows 8以降] 属性をコピーします(既定のオプション)。
E拡張属性[Windows 10 バージョン???以降] 拡張属性(EA)をコピーします。(拡張属性は通常の方法では触ることができませんが、ネットワーク越しにLinuxコマンドで読み書き可能な場合があります。)
X代替データストリームのスキップ[Windows 10 バージョン???以降] データをコピーしません(D の効果を打ち消します)。「T」や「A」を指定する場合は「D」を指定しなければ問題ありませんが、他のオプションを指定したくない場合は「/DCOPY:X」と指定することができます。
※ 古いResource Kit版のRobocopyでは使用できません。
※ 「A」指定が無くても読み取り専用や隠しファイルなどの属性はコピーされます。A によって具体的にどの属性のコピーが制御されるかは不明です。
※ 「E」を指定している場合でコピーに失敗した場合でも、中断せずコピー処理が続行されます。
※ 明示的に「E」を指定しない場合、/COPYALL を使ったとしても拡張属性はコピーされません。
/NODCOPY
[Windows 8以降] ディレクトリの属性などの情報をコピーしません。指定しなかった場合「/DCOPY:DA」が使用されるため、その効果を打ち消す場合に指定します。また、このオプションを利用した場合「隠しファイル」などの属性もコピーされません。
/SECFIX
スキップされたファイルも含め、コピー先のファイルのセキュリティ情報(アクセス権など)をコピー元に揃えます。コピー指定に「S」が含まれている必要があります(/COPY:S/SEC の指定などで「S」が含まれるようになります)。
※ 古いResource Kit版のRobocopyでは使用できません。
/TIMFIX
スキップされたファイルも含め、コピー先のファイルのファイル時刻(主に作成日時)をコピー元に揃えます。コピー元とコピー先のファイルが「同一の中身かつ同じ更新日時」ではない場合は修正が行われません。/COPY:T ではファイルの中身と更新日時が一致する場合に作成日時のコピーが行われませんが、このオプションを利用することで作成日時のコピー(修正)を行うことができます。
※ 古いResource Kit版のRobocopyでは使用できません。
/PURGE
コピー先に存在しているファイル・ディレクトリがコピー元に存在しない場合、それらを削除します。/E が無い場合(/MIR が無い場合)は、コピー先直下にあるディレクトリはチェックされますがその中のファイルやサブディレクトリはチェックされません。
/MIR
ミラーリング(コピー元とコピー先のファイル数とデータを同じ状態にする)を行います。これは「/E /PURGE」の指定と同じ意味です。
/MOV
ファイルを移動します(コピー後にコピー元ファイルが削除されます)。
※ コピー操作が行われなかったファイル(コピー元とコピー先が一致している場合など)は削除されません。「/COPY:AT」などデータコピーが行われない指定があった場合でも、属性が一致しない場合はコピーが行われるため、そのときはコピー元が削除されます。
/MOVE
ファイルとディレクトリを移動します(コピー後にコピー元に存在していたファイルとディレクトリが削除されます)。
/A+:<attrs>
コピー後にコピー先のファイルに属性を追加します。<attrs> には以下の属性を表す文字を1文字または組み合わせて指定します。
文字意味
R読み取り専用
Aアーカイブ
Sシステムファイル
H隠しファイル
C圧縮されたファイル (NTFSなど)
N非インデックス対象ファイル (※ Attribなどでは「I」で表現されます。%~aX では表示されません)
E暗号化されたファイル
T一時ファイル (※ Attribで設定できない属性ですが、エクスプローラーのファイルのプロパティー「詳細」タブ、あるいは %~aX で取得できる値で「T」を確認できます)
※ 「一時ファイル属性」(T) はファイル操作時に極力メモリ上にデータを蓄え、蓄えられなくなるかファイル操作が終了して削除されなかったときに書き込みを行います。一時ファイル属性の付いたファイルは使用後に削除されることが想定されているため、不用意にこの属性を付加するとデータが失われたりパフォーマンスに影響を与えたりする場合があります。
※ コピー先のディレクトリにも属性を付加しようとするため、一部属性(T など)は設定できずエラーになる場合があります。
※ 古いResource Kit版のRobocopyでは C と E は使用できません。
/A-:<attrs>
コピー後にコピー先のファイルに付いている属性を削除します。<attrs> には削除したい属性に対応する上記のリストの文字を指定します。
[Windows 11 ????以降] /A- に限り、<attrs> に「O」(オフライン属性)を指定することもできます。
/CREATE
ファイルの中身はコピーせず、ファイルだけを作成します(/COPY:D があってもデータをコピーしません)。/S/E がある場合は対応するディレクトリも作成されます。なお、コピー先が存在する場合はデータを0バイトに書き換えることはせず、(オプションで指定されていれば)日付や属性などの情報のみをコピーします。
/SL
[Windows Vista SP1以降] コピー元にシンボリックリンクが存在する場合、そのリンク先ではなくシンボリックリンクそのものをコピーします。ディレクトリのシンボリックリンクについては /S/E が指定されている場合に効果があります。
※ シンボリックリンクのコピーには管理者権限(シンボリックリンク作成権限; SeCreateSymbolicLinkPrivilege)が必要です。
※ シンボリックリンクではなくジャンクションポイントとして作成されているディレクトリには /SL の効果は働かず、/E がある場合コピー先にはジャンクションポイントとしてではなくディレクトリとして作成されます。[Windows 10] ジャンクションポイントとしてコピーしたい場合は /SJ オプションを使います。
/SJ
[Windows 10 2004 および 17763.1432?以降] コピー元にジャンクションポイントが存在する場合、そのターゲットではなくジャンクションポイントそのものをコピーします。/S/E が指定されている場合にのみ効果があります。
コピーモード(処理オプション)の指定
/Z
再起動可能モード(restartable mode)でコピーします。通信不良などが発生してコピーに失敗した場合、同じファイル名を用いればコピーを再開することができます。
/B
バックアップモードでコピーします。バックアップと復元の権限(SeBackupPrivilege・SeRestorePrivilege)を持つユーザーである場合はファイルの所有権やセキュリティに関係なくコピーすることができます。
※ 管理者権限またはバックアップと復元の権限を持つユーザーで実行する必要があります。詳細については解説の「権限について」をご覧ください。
/ZB
再起動可能モード(restartable mode)でコピーを行い、アクセス拒否エラーが発生した場合はバックアップモードを使用します。
※ 管理者権限またはバックアップと復元の権限を持つユーザーで実行する必要があります。詳細については解説の「権限について」をご覧ください。
/J
[Windows 8以降] バッファー無しI/Oモードでコピーを行います。ファイルの入出力時に一時バッファーを用いないため、大きいファイルのコピー速度が向上しますが、コピーを中断すると予期しない状態になる可能性があります。
/EFSRAW
暗号化されたファイルを EFS RAWモードでコピーします。EFS RAWモードの場合、暗号化されたファイルを復号・暗号化せずにそのままの状態でコピーします。これにより、バックアップなどの権限があれば復号化するためのキーが無くても(ファイルの中身が分からなくても)コピー操作を行うことができます。
※ 該当ファイルへのアクセス権、管理者権限、またはバックアップ権限のいずれかを持つユーザーで実行する必要があります。
※ Resource Kit版のRobocopyでは使用できません。
/FAT
「短いファイル名」(8.3形式のファイル名)のみを使用してコピー先のファイルを作成します。
/256
256文字を超えるパス名のサポートをOFFにします。このスイッチが指定されている場合、フルパスが長すぎるファイルをコピーしようとするとファイルが見つからないエラーになります。
/MON:n
コピー操作後監視を開始し、コピー元に n 回の変更を検出した場合再度コピーを行い監視を続けます。n には数値を指定します。「変更」にはファイルの中身の変更だけでなく、更新日時や属性の変更も含まれます。監視は /MOT:m で指定した分間隔(省略した場合は1分間隔)に都度ファイルをチェックすることで行いますが、その間隔内で修正→元に戻すという変更があっても変更は2回(例: 読み取り属性を付ける→外す、で2回)とカウントされます。なお、監視を終了するには Ctrl+C を入力します。
※ ファイルの中身の変更は通常の場合更新日時も併せて変更となり、2回分の変更としてカウントされます(更新日時を意図的に以前のままとした場合を除く)。
/MOT:m
コピー操作後監視を開始し、m 分間隔でチェックを行い何らかの変更を1回以上検出した場合再度コピーを行い監視を続けます。/MON 指定がある場合はその回数だけ変更が蓄積された時に再度コピーを行います。監視の内容については /MON の説明をご覧ください。
/RH:hhmm-hhmm
コピー操作を行う時間帯を制限します。hhmmにはローカルシステムでの時刻を24時間表記(午後2時30分なら「1430」)で指定します。ファイルのコピーは指定した時刻の間にのみ行われ、それ以外のタイミングでは実行を待機します。なお、時刻の範囲が逆転している(「/RH:1234-1212」などとなっている)場合は、小さい方の時刻が翌日の時刻として扱われます。
/PF
/RH で時間帯によるコピー制限を行う際、その制限をパス(親ディレクトリ)ごとではなくファイルごとにチェックします。これにより、コピーに時間のかかるファイルがある場合に次のファイルのコピーが時間帯を超えたタイミングで実行が中断されます。
/IPG:n
Interpacket Gap(パケット間隔、フレーム間ギャップ)を時間で指定します。n にはミリ秒で間隔を指定します。Robocopyは(およそ)64KiB単位でデータのコピーを行いますが、その単位分のデータを読み取り、コピーした際にこのオプションで指定した時間だけ待機を行います。ネットワーク経由のコピーで帯域を占有しないようにする目的などで用いられます。
/MT:n
[Windows 7以降] マルチスレッドでコピーを行います。n には作成するスレッドの数を指定します。スレッド数を増やすことで並列処理を行い、環境によっては高速にコピー処理をすることができます。/LOG オプションでログ出力をファイルに書き込むことでさらにパフォーマンスを高められる場合があります。
/MT オプションは /EFSRAW/IPG オプションと合わせて使用することができません。それ以外の場合で /MT を指定しなかった場合は8スレッドでの並列処理を行います。
/NOOFFLOAD
[Windows 8以降] オフロードデータ転送(ODX)を利用したコピーを行いません。このオプションを使用しない場合はオフロードデータ転送によって最適化されたコピーが行われることがあるため、/NOOFFLOAD を用いるとパフォーマンスが低下する可能性があります。
/COMPRESS
[Windows 10 2004 および 17763.1432?以降] 利用可能な場合、「SMB圧縮」(SMB Compression)を利用してコピー処理を行います。「SMB圧縮」はネットワーク越しのコピー操作においてデータ圧縮を行い、帯域を節約する(転送速度向上などを行う)ことを可能にします。
※ この機能を利用するには、コピー先がSMB圧縮に対応している必要があります。
/SPARSE
[Windows 11 22H2?以降] スパースファイルをコピーする際、スパース状態をそのままコピーします。このオプションを指定しない場合、スパースファイルをコピーするとコピー先ファイルは非スパースファイルになります。
※ 最新でない Windows 11 では、スパースされた範囲があるファイルを /SPARSE でコピーしようとすると、コピー操作が途中で止まってしまうことがあるようです。(少なくとも Windows 11 ver 10.0.22621.2506 では正常にコピーできます。)
スロットリングオプション
/IoMaxSize:size
[Windows 11以降] コピーの1サイクル(読み書き)当たりのサイズ上限を指定サイズにします。size にはバイト単位の数値を指定するか、数値と単位「K」(キロバイト)「M」(メガバイト)「G」(ギガバイト)を組み合わせて指定します。例えば2ギガバイトを上限とする場合は「/iomaxsize:2G」と指定します。(解説も参照)
/IoRate:size
[Windows 11以降] コピー1秒当たりのサイズ上限(コピー速度)を指定サイズ/秒にします。size にはバイト単位の数値を指定するか、数値と単位「K」(キロバイト)「M」(メガバイト)「G」(ギガバイト)を組み合わせて指定します。例えば1MiB/s(1メガバイト毎秒)を速度の上限とする場合は「/iorate:1M」と指定します。(解説も参照)
/Threshold:size
[Windows 11以降] /IoMaxSize または /IoRate の制限を適用するファイルサイズの下限値を指定します。既定ではすべてのファイルに対して制限が適用されますが、/Threshold を指定した場合は指定したサイズを下回るファイルに対しては制限が適用されません。size にはバイト単位の数値を指定するか、数値と単位「K」(キロバイト)「M」(メガバイト)「G」(ギガバイト)を組み合わせて指定します。例えば2ギガバイトを下限とする場合は「/threshold:2G」と指定します。
ファイル選択オプション
属性による選択・除外
/A
アーカイブ属性の付いたファイルのみを対象とします。Xcopyの「/A」オプションと同じです。
/M
アーカイブ属性の付いたファイルのみを対象とし、コピー後にコピー元ファイルのアーカイブ属性を解除します。Xcopyの「/M」オプションと同じです。
/IA:<attrs>
指定した属性が付いているファイルのみを対象とします(Include Attributes)。<attrs> には「/A+」オプションと同じ「RASHCNET」文字に加え「O」(オフラインファイル属性)も指定することができます。
※ オフラインファイル属性はRobocopyやAttribで設定できない属性ですが、エクスプローラーのファイルのプロパティー「詳細」タブ、あるいは %~aX で取得できる値で「O」を確認できます。また、エクスプローラーではアイコンに×マークが付きます。
/XA:<attrs>
指定した属性が付いているファイルを除外とします(eXclude Attributes)。<attrs> には「/IA」オプションと同じ「RASHCNETO」文字を指定します。
名前による除外
/XF <file>...
指定したファイルを除外します(eXclude Files)。<file> には除外したいファイル名を指定します(絶対パスやワイルドカードも使用可能ですが、ワイルドカードと絶対パスは組み合わせることができません)。ファイルはスペース区切りで複数指定することが可能です。
※ /XF オプション以降の「/」で始まらない文字列は /XD オプションが来るまですべて /XF の <file> に指定された文字列として扱われます。
/XD <directory>...
指定したディレクトリとその中のファイルを除外します(eXclude Directories)。<directory> には除外したいディレクトリ名を指定します(絶対パスやワイルドカードも使用可能ですが、ワイルドカードと絶対パスは組み合わせることができません)。ディレクトリ名はスペース区切りで複数指定することが可能です。
※ /XD オプション以降の「/」で始まらない文字列は /XF オプションが来るまですべて /XD の <directory> に指定された文字列として扱われます。
差分による選択・除外
/XC
コピー元とコピー先を比較して変更のあったファイルを除外します(eXclude Changed files)。
※ 「変更のあったファイル」は、コピー元とコピー先のファイル時刻が同一であるが中身が異なるファイルのことを指します。通常はファイルを編集するとファイル時刻(更新日時)も変わるため、このオプションで除外されるファイルが存在することは稀です(「/COPY:T」でそのようなファイルを作ることができます)。
/XN
コピー元とコピー先を比較してコピー元が新しい場合、そのファイルを除外します(eXclude Newer files)。
/XO
コピー元とコピー先を比較してコピー元が古い場合、そのファイルを除外します(eXclude Older files)。
/XX
コピー先にのみ存在するファイルやディレクトリを除外対象とします(eXclude eXtra files and directories)。/PURGE とともに指定されていると /PURGE の効果がほぼ失われます。
/XL
コピー元にのみ存在するファイルやディレクトリを除外対象とします(eXclude Lonely files and directories)。コピー元・コピー先の両方に存在するファイルのみ更新を行う場合に指定すると便利です。
/IS
コピー元とコピー先で一致するファイルを対象に含めます(Include Same files)。/IS を指定しないと同一ファイルはスキップされます。このオプションは一致するファイル以外を除外しません。
※ 「一致するファイル」は、コピー元とコピー先の中身と更新日時が同一であることを表します。/IS を指定しても /TIMFIX が修正対象とするファイルは変わりません。
/IT
マイナーな変更のあったファイルを対象に含めます(Include Tweaked files)。ここでの「マイナーな変更」とはファイル属性の変更などを表します。通常はファイル属性の変更は「変更のあったファイル」とならず、ファイルの中身や更新日時が一致すると属性が異なっていてもコピー対象から除外されますが、/IT オプションを指定することでファイル属性を揃えることができます。
※ 「robocopy /?」での説明には「異常なファイル」と書かれていますが、/IT オプションに壊れたファイルを対象とする意味はありません。
※ 「暗号化状態の相違」は /IT が含む対象とはなりません。
/IM
[Windows 10 2004 および 17763.1432?以降] コピー元とコピー先を比較して「内部更新日時」が異なるファイルを含めます(Include Modified files)。「内部更新日時」は、通常の更新日時とは異なり、主にNTFSファイルシステムにおいてデータの書き換えではなくセキュリティ情報の属性など(MFTエントリー内の情報)が書き換えられたときに更新される日時(MFTエントリーの更新日時)となります。例として、セキュリティ情報のみが書き換えられたファイルの場合、/IS オプションを使わない限り(/IT オプションを使っても)「含まれる」ことにはなりませんが、内部更新日時が更新されるため /IM オプションを入れることで「含まれる」扱いとなります。
なお、セキュリティ情報をコピーする扱いとした場合(/COPY オプションに S O U を含めたり /SEC オプションを使ったりした場合)は、自動的に /IM オプションが指定されます。
※ このオプションはコピー元・コピー先がともに内部更新日時に対応している場合にのみ有効です。例として、コピー元・コピー先がNTFSである場合に有効です。
日付による選択・除外
/MAX:n
指定したバイト数より大きなファイルがコピー元にある場合、それらを除外します。n にはバイト単位で境界となるサイズを指定します。
/MIN:n
指定したバイト数より小さなファイルがコピー元にある場合、それらを除外します。n にはバイト単位で境界となるサイズを指定します。
/MAXAGE:n
指定した日数または日付より古い更新日時のファイルがコピー元にある場合、それらを除外します(MAXimum file AGE: ファイルを含める対象とする最大の経過期間を指定します)。n には過去にさかのぼる日数、または実際の日付を「YYYYMMDD」の形式で指定します(「3」なら3日前を境界とします)。
/MINAGE:n
指定した日数または日付より新しい更新日時のファイルがコピー元にある場合、それらを除外します(MINimum file AGE: ファイルを含める対象とする最小の経過期間を指定します)。n には過去にさかのぼる日数、または実際の日付を「YYYYMMDD」の形式で指定します。
/MAXLAD:n
指定した日数または日付以降にファイルへのアクセスがないファイルがコピー元にある場合、それらを除外します(MAXimum Last Access Date: ファイルを含める対象とする最初のアクセス日時を指定します)。n には過去にさかのぼる日数、または実際の日付を「YYYYMMDD」の形式で指定します(「3」なら3日前から現在に至るまでの期間にアクセスがあるかどうかをチェックし、アクセスが無いものを除外対象とします)。
/MINLAD:n
指定した日数または日付以降にファイルへのアクセスがあるファイルがコピー元にある場合、それらを除外します(MINimum Last Access Date: ファイルを含める対象とする最後のアクセス日時を指定します)。n には過去にさかのぼる日数、または実際の日付を「YYYYMMDD」の形式で指定します。
/FFT
FATファイル時間(FATファイルシステムにおけるファイル日時)での日時比較を行います。FATファイル時間では時刻の精度が2秒となり、それ未満の差は同一の日時として扱われます。
/DST
サマータイム補整を行います(DST = Daylight Saving Time)。
※ システムがサマータイムを採用している場合で日時を比較するオプションを利用する際に指定すると有効になると思われますが、未調査です。
※ 古いResource Kit版のRobocopyでは使用できません。
/XJ
ジャンクションポイント(接合点)およびシンボリックリンクを除外します(eXclude Junction points)。通常は「ジャンクション」や「シンボリックリンク」となるファイルやディレクトリ(「ジャンクション」はディレクトリのみ)はコピー対象に含まれます。/SL/SJ が指定されている場合でも /XJ がある場合はコピー自体が行われません。
/XJD
ディレクトリに対するジャンクションポイントおよびシンボリックリンクを除外します(eXclude Junction points for Directories)。/SL/SJ が指定されている場合でも /XJD がある場合は該当するディレクトリのコピーは行われません(/XJ および /XJF が無い場合はファイルのシンボリックリンクはコピーされます)。
※ 古いResource Kit版のRobocopyでは使用できません。
/XJF
ファイルに対するシンボリックリンクを除外します(eXclude Junction points for Files)。/SL が指定されている場合でも /XJF がある場合は該当するファイルのコピーは行われません(/XJ および /XJD が無い場合はディレクトリのジャンクションポイントおよびシンボリックリンクはコピーされます)。
※ ファイルにはジャンクションポイントは原則存在しないため、シンボリックリンクの除外となります。
※ 古いResource Kit版のRobocopyでは使用できません。
リトライ(再試行)オプション
/R:n
コピーに失敗した際に再試行を行う回数を指定します。n は数値で回数を指定します。指定しなかった場合はレジストリに保存された値(下記 /REG で保存した値)、それも存在しない場合は既定値の「1,000,000」(100万回)が使用されます。
/W:n
コピーに失敗した際に再試行を行うまでの待機時間を指定します。n は秒単位の数値で待機時間を指定します。指定しなかった場合はレジストリに保存された値(下記 /REG で保存した値)、それも存在しない場合は既定値の「30」(30秒)が使用されます。
/REG
/R と /W で指定した値をレジストリに保存します。保存場所は「HKEY_CURRENT_USER\Software\Microsoft\ResKit\Robocopy」以下で、「RetryMax」に再試行回数、「WaitTime」に待機時間(ミリ秒単位)を保存します。
/TBD
「ネットワーク名が見つかりません」エラー(システムエラー値: 67)が発生した場合、見つからないエラーですぐ終了せず、共有名(ネットワーク名)が定義されるまでリトライします(To Be Defined)。リトライの回数や待機時間は /R/W の設定に準じます。
※ コンピューターが見つからないエラーである「ネットワーク パスが見つかりません」(システムエラー値: 53)は対象外です。
/LFSM[:size]
[Windows 10 2004 および 17763.1432?以降] 「空き容量不足モード」を有効にします。このモードでは、コピー先のボリュームの空き容量が特定のサイズ(下限)を下回った場合にコピーを中断し、/R/W のオプションに従い再試行します。
特定のサイズは「/LFSM:size」の「size」で指定します。size には数値と単位「K」(キロバイト)「M」(メガバイト)「G」(ギガバイト)を組み合わせて指定します。例えば2ギガバイトを下限とする場合は「/LFSM:2G」と指定します。
なお、サイズを指定せず単に「/LFSM」のみを指定した場合は、「コピー先のボリュームの空き容量」の 10% に相当するサイズを下限として用います(「コピー先ボリュームの総容量」の 10% ではありません)。
※ コピー処理は1バイトずつ行われるわけではないため、空き容量が下限ぴったりで止まることはまれで、多くの場合下限よりもある程度下回った状態で止まります。
ログオプション
※ 下記「ログに出力」は、ファイルへの出力指定がない場合はコンソール(標準出力)に出力されます。
/L
コピーや追加・削除が行われる場合のファイルのリストなどをログに出力しますが、コピーなどの操作を行いません。Robocopyに指定したオプションによってどのようなファイル操作が発生するかを確認する場合に使用します。
/X
選択されていないファイルの一覧もログに出力します。「<files>...」にファイルが指定されている場合、通常はコピー(または移動など)されたファイルのみをログに出力しますが、/X オプションを指定することでその他のファイル(EXTRA File)の一覧も出力されます。
※ 「選択されていないファイル」は「ファイル選択オプション」で除外されたファイルとは無関係です。
/V
スキップされたファイルの一覧もログに出力します。これにはコピー元とコピー先が同じでコピーされなかったファイルに加え、「ファイル選択オプション」で除外されたファイルなども含まれます。
/TS
ファイル一覧をログに出力する際、そのファイルの更新日時をタイムスタンプとしてログに含めます(Time Stamps)。
※ タイムスタンプはUTC時刻で出力されます。
/FP
ファイル一覧をログに出力する際、そのファイルのフルパス名をログに含めます(Full Pathname)。
/BYTES
ファイル一覧をログに出力する際、そのファイルのサイズをバイト数でログに含めます。既定では一定数超えると「k」(KiB)や「m」(MiB)などの単位に変換して出力されますが、/BYTES を指定するとバイト単位での値が(区切り文字無しで)そのまま出力されます。
/NS
ログにファイルサイズを含めません(No Size)。/BYTES がある場合は無視されます。
/NC
ログにファイルクラスを含めません(No Class)。「ファイルクラス」は「新しいファイル」「より古い」「EXTRA files」などの種別を指し、既定ではこれらの種別がログに含まれます。
/NFL
ログにファイル一覧を含めません(No File List)。
/NDL
ログにディレクトリ一覧を含めません(No Directory List)。
※ /NDL が指定されると /FP が指定された場合と同様にファイル名がフルパスで出力されます。
/NJH
ジョブヘッダーを出力しません(No Job Header)。「ジョブヘッダー」にはRobocopyプログラム名・開始時刻・各種オプション表示が含まれます。
/NJS
ジョブの処理結果を出力しません(No Job Summary)。「ジョブの処理結果」にはコピー対象・スキップ・Extraなどのファイル・ディレクトリの総数の一覧と終了時刻が含まれます。
/NP
進捗状況(どの程度コピーされたかを示すパーセントなど)の表示を行いません(No Progress)。
/ETA
2つ目以降のファイルについてコピーされるファイルの推定完了時刻を出力します(Estimated Time of Arrival of copied files)。
※ 推定完了時刻は実際よりもかなり遅い時刻になるようです。また、/IPG の値が大きくなると推定完了時刻もその分遅くなります。
/LOG:<log-file>
ログをコンソール(標準出力)ではなく <log-file> に指定したファイルに出力します。出力時、ファイルの内容は上書き(クリア)されます。
/LOG+:<log-file>
ログをコンソール(標準出力)ではなく <log-file> に指定したファイルに出力します。/LOG と異なり、出力時にファイルの内容は残され、追記する形でログ出力されます。
※ 追記時、<log-file> の末尾にEOF文字(\x1A)があっても削除されません。
/UNILOG:<log-file>
ログをUnicode(UTF-16)で出力する以外は /LOG と同じです。ログにはBOMが付加されます。
[Windows 7 まで?] 2015/02 現在、Windows 7 ではこのオプションはBOMを付加するのみで内容がShift JISで出力され、正しく動作しません(Windows 8.1では正しく動作します)。これはChcpでコードページを切り替えても変わりません。
※ 古いResource Kit版のRobocopyでは使用できません。
/UNILOG+:<log-file>
ログをUnicodeで出力する以外は /LOG+ と同じです。
[Windows 7 まで?] 2015/02 現在、Windows 7 ではこのオプションはUTF-16のBOMを付加するのみで内容がShift JISで出力され、正しく動作しません(Windows 8.1では正しく動作します)。
<log-file> がUnicodeのBOMを持っていない場合はShift JISで出力されます。また、UTF-8のBOMを持っている場合はUTF-8で出力されます
※ 古いResource Kit版のRobocopyでは使用できません。
/UNICODE
状態をUnicode(UTF-16)で出力します。
※ 2023/11 現在、Windows 7 や Windows 8.1、Windows 10、Windows 11 ではこのオプションは正しく動作しない模様です(代わりに /UNILOG を使うのがベターです)。
※ 古いResource Kit版のRobocopyでは使用できません。
/TEE
/LOG や /UNILOG でログをファイルに出力する場合でも、コンソール(標準出力)へのログ出力を行います。Linux系のteeコマンドを利用することと似ています。
ジョブ関連オプション
/JOB:<job-file>
オプションが記述されているジョブファイルを指定します(ジョブファイルについては後述の「ジョブファイルについて」をご覧ください)。<job-file> は拡張子が「RCJ」であるファイルを指定する必要があります。Robocopyはジョブファイルに記述されたオプションを追加で読み込み、その上で(/JOB より後ろに指定された)コマンドラインからのオプションを加えて処理を行います。
※ 「RCJ」でない拡張子のファイルを指定するとエラーになります。
※ /JOB は2回以上指定することができません(コマンドラインから2つ以上のジョブファイルを読み込むことはできません)。ただしジョブファイルに「/JOB」を1つだけ記述することは可能であり、ジョブファイル内から別のジョブファイルのオプションを読み込むことができます。
※ /JOB より前に指定されたオプションとジョブファイル内のオプションが重複する場合はジョブファイル内のオプションが優先されます。これはコマンドライン上でオプションが重複する場合と同様です。
/SAVE:<job-file>
オプションを保存するジョブファイルを指定します(後述)。<job-file> は拡張子が「RCJ」であるファイルを指定する必要があります。/QUIT を指定しない場合はオプションの保存と同時にコマンドの実行も行われます。
※ 「RCJ」でない拡張子のファイルを指定すると保存時に拡張子「RCJ」が付加されます。
※ /JOB と /SAVE を組み合わせることもできます。その場合 /JOB で指定したジョブファイルの内容とコマンドラインで指定された内容がマージされて出力されます。
/SAVE で保存されるオプションは /SAVE 指定より前までに指定されたオプション(ジョブファイル含む)のみです。/SAVE の後ろにオプションがある場合、それらはジョブファイルに保存されません。
/QUIT
コマンドを実行せずに終了します。/SAVE と組み合わせるとジョブファイルの作成、/JOB と組み合わせるとジョブファイルに記述されたオプションの確認を行うことができます。
※ /SAVE や /JOB を組み合わせなくとも /QUIT を用いることは可能です。
※ 「/QUIT」自体はジョブファイルに保存されません。
/NOSD
コピー元ディレクトリを指定しません(NO Source Directory)。ジョブファイルでコピー元を指定しない場合に用いられます。ジョブファイルに /NOSD が存在する場合はコマンドラインからコピー元を指定する必要があります。
※ /SAVE と /QUIT を組み合わせてジョブファイルを作成する場合、/NOSD を指定する必要はありません。
/NODD
コピー先ディレクトリを指定しません(NO Destination Directory)。ジョブファイルでコピー先を指定しない場合に用いられます。ジョブファイルに /NODD が存在する場合はコマンドラインからコピー先を指定する必要があります。
※ /SAVE と /QUIT を組み合わせてジョブファイルを作成する場合、/NODD を指定する必要はありません。
/IF <file>...
「/IF」に続くファイル名をコピー対象のファイルとして含めます(Include following Files)。ジョブファイルにおいてコマンドラインにおける<files>...」に相当する内容を記述する際に用いられます(コマンドラインで「/IF」を用いることも可能です)。

解説

Robocopyについて

Robocopyはファイルやディレクトリのコピー(またはミラーリングなど)をスケジュールされた処理として実行する際に便利なプログラムです。ファイル属性の操作やリトライ制御、ログ出力などにおいて細かいオプションが用意されています。

Xcopyでも比較的詳細なコピー操作を行うことができますが、主に以下の点がXcopyで実現できない操作となっています。

  • ファイルの属性やタイムスタンプなどによるコピー対象の選択・決定
  • コピー先にのみ存在するファイルの削除(ミラーリング)
  • 外部ファイル(ジョブファイル)からのオプションの読み込み

※ Robocopyでは単一のファイルのコピーも可能ですが、コピー元とコピー先が異なるファイル名になるような単一ファイルのコピーをすることができません(その場合はCopyまたはXcopyを用います)。

コピーするファイルの選択

Robocopyではオプションからのファイルを直接指定するほか、特定の条件に合ったファイルを選択する機能などがあります。条件の種類とそれに対応するオプションは以下の通りです。

条件の種類「含める」オプション「除外する」オプション
ファイル名 /IFパターンに一致するファイルのみ選択/XFパターンに一致するファイルを除外
(直接ファイル名指定) /XD(親)ディレクトリ名で除外
日付・時刻 (なし)/XNコピー元が新しい場合除外
/XOコピー元が古い場合除外
/MAXAGE最終更新が古いファイルを除外
/MINAGE最終更新が新しいファイルを除外
/MAXLAD指定日以降にアクセスの無いファイルを除外
/MINLAD指定日以降にアクセスのあるファイルを除外
ファイル属性 /IA指定属性のファイルのみ選択/XA指定属性のファイルを除外
/IT属性変更のみのファイルを含める
/Aアーカイブ属性を持つファイルのみ選択
/Mアーカイブ属性を持つファイルのみ選択(処理後解除)
リンク (なし)/XJジャンクションポイント・シンボリックリンクを除外
/XJDディレクトリのジャンクションポイント・シンボリックリンクを除外
/XJFファイルのシンボリックリンクを除外
サイズ (なし)/MAXサイズを超えるファイルを除外
/MINサイズに満たないファイルを除外
その他 /IS「一致」するファイルを含める/XXコピー先にのみ存在するファイルを除外
/XLコピー元にのみ存在するファイルを除外
/XC中身のみ異なるファイルを除外

コピー操作の確認

上記のファイル選択オプションは複数組み合わせることができますが、それによってどのファイルが選択されるかを確認するには「/L」を使用します。複数組み合わせるとコマンドライン(またはジョブファイル)が複雑になるため、/L を用いて確認を行うことを推奨します。

なお、/QUIT はオプションを画面に出力するのみですが、コマンドラインとジョブファイルを組み合わせた際の確認に使用することもできます(/QUIT で実際にコピー操作が発生するファイルを確認することはできません)。

スロットリング(コピー速度制限)

[Windows 11以降] Robocopyの /IoMaxSize および /IoRate のオプションを利用すると、Robocopyによるコピーの速度を抑制・制限することができます(スロットリング(throttling)。システムへの負荷を軽減する目的で利用することができます)。基本的には /IoMaxSize や /IoRate で指定した制限値でコピーが行われますが、指定した値によってはRobocopyによって値が調整されることがあります。

例:

robocopy D:\data\db X:\bk\db *.db /iorate:1M
-- コピー速度を1M/sに制限してファイル *.db をコピー

なお /Threshold オプションを利用することで、特定サイズを下回るファイルには制限をかけないようにすることができます。

ジョブファイルについて

ジョブファイルは、Robocopyのオプションを記したテキストファイルです。基本的にはコマンドラインで指定できるオプションを羅列した形式となります。(ジョブファイルに記述されたコマンドがそのままコマンドラインに渡されるイメージです。)

また、コマンドラインと異なり以下のメリットがあります。

  • 改行やスペースを用いた整形が可能 : コマンドラインでは通常1行で指定する必要がありますが、ジョブファイルでは複数行に分けて指定することができます。また自由にスペース文字・タブ文字を入れることができるため、見やすい形で記述することができます。
  • コメントの記述が可能 : コロン「:」を2文字連続で記述すると、その2文字とそれ以降(改行が来るまで)の文字は「コメント」として扱われ、コマンド処理時に無視されます。オプションの意味をメモしておくなどをすることができます。
  • 長いコマンドラインを指定可能 : コマンドラインでの指定は文字数の制限があります(Windows XP以降の場合8191文字とされています: コマンド プロンプトの行文字列の制限 - Windows Client | Microsoft Learn)が、ジョブファイルで記述する場合はその制限はありません。

例として、ジョブファイルは以下のように記述されます。

:: コメントの例

:: コピー元ディレクトリの指定
/SD:C:\dbs\r1\         :: 「C:\dbs\r1\」をコピー元ディレクトリとして設定
:: コピー先ディレクトリの指定
/DD:X:\Backup\dbs\r1\  :: 「X:\Backup\dbs\r1\」をコピー先ディレクトリとして設定
:: 含めるファイルの指定
/IF *.dat              :: 「*.dat」をコピー対象に設定
    *.db               :: 「*.db」もコピー対象に設定
:: コピーオプション
/COPY:DAT              :: データ・属性・タイムスタンプをコピー
:: その他オプション
/IS                    :: 一致していてもコピー
:: リトライなど
/R:5 /W:10             :: 5回までリトライ、リトライ時10秒待機
:: ログ
/TS /BYTES             :: タイムスタンプを含め、サイズをバイト単位で出力

※ スペース文字やタブ文字・改行文字は連続で複数記述しても問題ありません。
※ 「/SD:」と「/DD:」は、それらの指定より前に /IF などが無い場合に限り、「/SD:」「/DD:」を省略することが可能です。その場合は必ず <source-path> <dest-path> の順で指定する必要があります。

このジョブファイルを「X:\Backup\MYJOB.RCJ」として保存した場合、以下のようにRobocopyを呼び出すことができます。

set MY_DATE=%DATE:/=_%
robocopy /JOB:X:\Backup\MYJOB /LOG:X:\Backup\Backup_%MY_DATE%.log

この例では、MYJOB.RCJ に記述されたオプションに「/LOG」オプションを加えてRobocopyを実行することになります。この実行は以下のコマンドラインとほぼ同等です。

set MY_DATE=%DATE:/=_%
robocopy C:\dbs\r1\ X:\Backup\dbs\r1\ /IF *.dat *.db /COPY:DAT /IS /R:5 /W:10 /TS /BYTES /LOG:X:\Backup\Backup_%MY_DATE%.log

なお、ジョブファイルはテキスト形式のため手動で記述できますが、「/SAVE」オプションを用いることでRobocopy経由で生成することも可能です。/SAVE を用いてジョブファイルを作成すると、各オプションにオプションの説明(「robocopy /?」で表示される説明文)がコメントとして保存され、<source-path><dest-path>、/LOG で指定したログファイル名などが絶対パスで保存されます(指定されている場合)。ただし /SAVE オプションをコマンドラインの途中に指定すると、それより後ろに記述されたオプションは保存されませんので、順番にご注意ください。

ジョブファイルで記述された内容とコマンドラインで指定された内容が重なる場合は、コマンドラインで指定された内容が /JOB より後にあればそれが優先されます。ただしコピー元ディレクトリ・コピー先ディレクトリがジョブファイルで指定されている場合は、それらをコマンドラインでの指定で上書きすることはできません。

※ コマンドラインでの /JOB の指定が <source-path><dest-path> より後の場合、ジョブファイル内で /SD や /DD が指定されているとジョブファイルのエラーになります。
※ ジョブファイル内に /JOB を用いることもできます(インクルードのようなことができます)が、自分自身を指定すると半無限ループ状態になり、ファイルを同時にオープンできる数の限界に達したときにエラーで終了してしまいます。

ジョブファイルの文字コードについては、Robocopyが実行される環境のコードページ(ChcpModeで変更可能)と一致させる必要があります。例えば、Chcpでコードページを「20932」(EUC-JP)に設定している場合は、ジョブファイルの文字コードもEUC-JPで記述する必要があります。

※ ジョブファイルの文字コードがUTF-8の場合はChcpでコードページを「65001」に設定しますが、UTF-8を利用した場合日本語ファイル名が正しく扱えない模様です(2023年11月現在、Win7/Win10/Win11いずれも確認)。

権限について

一部のオプションはそれを実行するための権限を必要とします。ほとんどの場合管理者であれば権限を持っているため、エラーなくコマンドを実行することができます。それ以外にも、「/B」オプションなどはバックアップ・復元の権限があれば管理者ユーザーでなくてもコマンドを実行することができます。

[Windows Vista以降] UAC(User Account Control; ユーザーアカウント制御)が有効になっている場合、権限を持っているユーザーでも昇格が行われていない場合は権限がない扱いとなり、コマンドの実行に失敗します。この場合、

  • コマンドプロンプト(など)を「管理者として実行」で開き、その中で実行する
  • 「タスク スケジューラ」でタスクとして実行する際に「最上位の特権で実行する」をオンにする

などの方法で昇格する必要があります。Robocopy 自身は昇格処理をする機能を持っていないため、/B や /COPY:U などを行う場合は権限の昇格を行ってください。(Runasで実行しても、RunasはUACの権限昇格を行わないため不十分となります。権限昇格の例はRunasのページもご覧ください。)

なお、現在の環境(プロンプト/バッチファイル)で権限を持っているかどうかを確認するために、「whoami /PRIV」を利用してUACの昇格も考慮した権限の一覧を表示・取得することができます。

※ ログイン中のユーザーが通常のユーザーより強い権限を持っている場合、「管理者として実行」を実行する際にログイン中のユーザーを選択することもできます。これにより、(管理者としてログインせずとも)その強い権限を有効にした状態でコマンドプロンプトを開くことができます。
※ UACによる昇格の制限がなされない設定になっている場合は、これらの作業なしにコマンドを実行することができます(セキュリティ的にはあまり推奨されません)。

終了コード

Robocopyはコピー操作を完了した際、その状態に応じて終了コード(エラーコード、戻り値)を設定します。終了コードは If Errorlevel文(およびERRORLEVEL環境変数)を用いて判定する際に役に立ちます。

Robocopyの終了コードは以下の値を組み合わせたもの(足し算)になります。

意味
0 何も行われませんでした。(コピー対象がありませんでした。)
1 ファイルがコピーされました。
2 コピー先にだけ存在するファイルがありました。
4 同じ名前でファイルかディレクトリ(フォルダー)かが異なるものがありました。
8 失敗したコピーがあります。

例えば「3」という終了コードは「ファイルがコピーされ、かつコピー先にのみファイルがあった」という意味に、「6」という終了コードは「コピーは無く、コピー先にだけあるファイルが存在し、ファイルとディレクトリが不一致であるものが存在した」という意味に、「9」という終了コードは「一部ファイルはコピーされたが、一部はコピーに失敗した」という意味になります。

※ 一般的に終了コードは「0」が成功扱いとなりますが、Robocopyの場合は「8未満」(場合によっては「4未満」)が成功扱いと言えます。

この組み合わせられた終了コードは、バッチファイルにおいてIf Errorlevel文を使って容易に判定することができます。If Errorlevel文は「終了コードが指定の数値以上かどうか」を判定するものであるため、「8以上かどうか」などの判定を以下のように書くことができます。

robocopy /JOB:MyJob.rcj
if errorlevel 8 goto OnError
if errorlevel 4 goto OnMismatchedFile

echo コピー操作が完了しました。
goto OnExit

:OnMismatchedFile
echo コピー操作が完了しましたが、一部のファイルが不一致でした。
goto OnExit

:OnError
echo コピー時にエラーが発生しました。

:OnExit

サンプル1

robocopy C:\MyDoc D:\Backup\MyDoc /E

C:\MyDoc に含まれるファイルおよびサブディレクトリ(/E によって含まれます)を D:\Backup\MyDoc にコピーします。既定の動作により、コピー先に存在するファイルはそのまま、データとファイル日時の変更がないファイルはコピーが行われません。

サンプル2

robocopy C:\MyDoc D:\Backup\MyDoc /E /A

C:\MyDoc に含まれるファイルおよびサブディレクトリ(/E によって含まれます)のうちアーカイブ属性のついたファイルのみ(/A による挙動です)を D:\Backup\MyDoc にコピーします。Xcopyページにあるサンプル1とほぼ同じ動作となります。

サンプル3

robocopy H:\Data R:\External\Data /MIR /A+:N

H:\Data に含まれるファイルを R:\External\Data にコピーし、R:\External\Data にのみ存在するファイルを削除します(/MIR による挙動です)。また、新しくファイルがコピーされる際にコピー先のファイルに非インデックス属性を追加します(/A+:N による挙動です)。

※ 既に存在するファイルに対しては属性を変更しません。

サンプル4

robocopy Z:\Data E:\Current\Data /E /XO

Z:\Data に含まれるファイルおよびサブディレクトリ(/E によって含まれます)を E:\Current\Data にコピーします。ただし、Z:\Data 側にあるファイルが古い場合は、それらのファイルをコピーから除外します(/XO による挙動です)。Xcopyページにあるサンプル3とほぼ同じ動作となります。

サンプル5

robocopy D:\Projects\Piyo\Sources X:\Projects\Bar\Sources /E /XA:R

D:\Projects\Piyo\Sources に含まれるファイルおよびサブディレクトリ(/E によって含まれます)を X:\Projects\Bar\Sources にコピーします。ただし、コピー元またはコピー先のファイルに読み取り専用属性がついている場合は、それらのファイルをコピーから除外します(/XA:R による挙動です)。

サンプル6

robocopy P:\Logs Q:\Backup\Logs /E /IF access*.* error*.* /XF access_ignore_*.* error_ignore_*.*

P:\Logs に含まれるファイルおよびサブディレクトリ(/E によって含まれます)のうちワイルドカード指定の「access*.*」または「error*.*」に一致するファイルすべて(/IF によって指定されます)を Q:\Backup\Logs にコピーします。ただし、「access_ignore_*.*」および「error_ignore_*.*」に一致するファイルは除外されます(/XF によって指定されます)。

サンプル7

robocopy D:\Foo\Bar "F:\Backups\2015 Foo Bar" /JOB:"F:\Backups\Job Files\Op1.rcj" /LOG:"F:\Backups\2015 Foo Bar Log.txt"

「D:\Foo\Bar」から「F:\Backups\2015 Foo Bar」へのコピー操作を、ジョブファイル「F:\Backups\Job Files\Op1.rcj」を用いて実行し、そのログを「F:\Backups\2015 Foo Bar Log.txt」に記録します。具体的なコピー操作の内容はジョブファイルに依存します。

関連項目