Robocopyは、Windowsで大量のデータをコピーするために最もよく使われるコマンドラインユーティリティの一つです。その強力さゆえに人気がありますが、その強力さには複雑さも伴います。このガイドでは、その複雑さをすべて解説し、この便利なツールの使用方法について完全なチュートリアルを提供します。
Robocopyは、Windows NTから利用可能なWindowsのコマンドラインユーティリティです。より多機能なxcopyユーティリティの代わりとなります。コマンドプロンプトでドライブパスまたはサーバーパスを指定してファイルをコピー/移動することができます。
この記事執筆時点でのRobocopyのバージョンは10.0.18までです。私がテストを行ったのはこのバージョンです。
Robocopyは、効率的かつ高速なファイルのコピーと移動を実行するために活用できる多数の機能を提供します。以下のことができます:
- ネットワーク経由でファイルを再開可能な形でコピーする
- 無限ループから通常失敗するNTFSジャンクションポイントをスキップすることができる
- ファイルとディレクトリの属性をコピーし、タイムスタンプを保持することができる
- NTFSの権限、所有者、監査情報をコピーすることができる
- ディレクトリのタイムスタンプをコピーすることができる
- 管理者に対してアクセス権が拒否されていても、ファイルがコピーされるように「バックアップ」モードでファイルをコピーすることができる
- 自動的なリトライ
- 2つのフォルダを同期させることができる
- 既にコピー済みのファイルをスキップすることができる
- 256文字のパス制限を超えるパスをコピーすることができる
- マルチスレッド機能を使用して非同期コピーを実行することができる
- スクリプトで使用するための標準化された終了コードを返します
ご覧の通り、コピーするものがたくさんあります。この便利なツールについて知っておく必要があるすべてをカバーしたかったのです。
一般的なRobocopyの構文リファレンス
なぜ単一のユーティリティについてこんなに長いブログ投稿があるのか、以下の表をご覧ください。Robocopyでファイルをコピーまたは移動するための多くのオプションがあります!各セクションでさらに多くのオプションがあります。
これらの表は、robocopy /?
で返されるヘルプ構文から作成されました。それらはより意味のあるセクションに分割され、時間が経つにつれて追加され、より有用な情報を提供するように整理されました。
ソースオプション
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/S | Copy subfolders | |||
/E | Copy subfolders including empty subfolders | |||
/COPY:[DATSOU] | Copy options | /COPY:DAT | D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T) | |
/SEC | Copy files with SECurity | /COPY:DATS | ||
/DCOPY:T | Copy directory timestamps | |||
/COPYALL | Copy ALL file info | /COPY:DATSOU | This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit) | |
/NOCOPY | Copy NO file info | useful with /PURGE | ||
/A | Copy only files with the Archive attribute set | |||
/M | like /A, but remove Archive attribute from source files | |||
/LEV:n | Only copy the top n LEVels of the source tree | |||
/MAXAGE:n | MAXimum file AGE – exclude files older than n days/date | |||
/MINAGE:n | MINimum file AGE – exclude files newer than n days/date | If n < 1900 then n = no of days, else n = YYYYMMDD date | ||
/FFT | Assume FAT File Times | 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network. | ||
/256 | Turn off very long path (> 256 characters) support |
宛先オプション
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/A+:[RASHCNET] | Set file attribute(s) on destination files + add | |||
/A-:[RASHCNET] | Remove file attribute(s) on destination files | |||
/FAT | Create destination files using 8.3 FAT file names only | |||
/CREATE | Create directory tree structure + zero-length files only | |||
/DST | Compensate for one-hour DST time differences |
コピーのオプション
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/L | List files only | Don’t copy, timestamp or delete any files | ||
/MOV | Move files | Delete from source after copying | ||
/MOVE | Move files and directories | Delete from source after copying | ||
/sl | Copy file symbolic links instead of the target | |||
/Z | Copy files in restartable mode | Survive a network glitch | ||
/B | Copy files in backup mode | |||
/J | Copy using unbuffered I/O | Recommended for large files | ||
/NOOFFLOAD | Copy files without using the Windows copy offload mechanism | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | Copy any encrypted files using EFS RAW mode | |||
/TIMFIX | Fix file times on all files, even skipped files | |||
/XO | Exclude older | if destination file exists and is the same date or newer than the source – don’t bother to overwrite it. | ||
/XC | Exclude changed files | |||
/XN | Exclude newer files | |||
/XX | Exclude files present in destination but not source | /XX | ||
/XF file [file]… | Exclude files matching given names/paths/wildcards | |||
/XD dirs [dirs]… | Exclude directories matching given names/paths. | /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S | ||
/IA:[RASHCNETO] | Include files with any of the given attributes | |||
/XA:[RASHCNETO] | Exclude files with any of the given attributes | |||
/IM | Overwrite modified files. This includes the same files with different times. | |||
/IS | Overwrite files even if they are already the same | |||
/IT | Include tweaked files | |||
/XJ | Exclude junction points from source | /XJ | ||
/XJD | Exclude junction points from source directories | |||
/XJF | Exclude junction points from source files | |||
/MAX:n | Exclude files bigger than n bytes | |||
/MIN:n | Exclude files smaller than n bytes | |||
/MAXLAD:n | Exclude files unused since n | |||
/MINLAD:n | Exclude files used since n | If n < 1900 then n = n days, else n = YYYYMMDD date | ||
/MIR | Mirror a directory tree | /PURGE /E | ||
/PURGE | Delete dest files/folders that no longer exist in source | |||
/XL | Exclude files present in source but not destination | |||
/SECFIX | Robocopy /secfix fixes file security on all files, even skipped files. | Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC | ||
/ZB | Use restartable mode; if access denied use Backup mode |
モニタリングのオプション
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/R:n | Number of retries on failed copies | /R:1000000 | Always try to set this option. I recommend setting this to 10-20 to not waste time retrying. | |
/W:n | Wait time between retries | /W:30 | Always try to set this option to a lower number to retry more quickly. I suggest 5-10. | |
/REG | Save /R:n and /W:n in the Windows registry as default settings | |||
/RH:hhmm-hhmm | times when new copies can be started | |||
/TBD | Wait for sharenames to be defined | retry error 67 | ||
/PF | Check run hours on a per file (not per pass) basis | |||
/MON:n | Run again when more than n changes seen | |||
/MOT:m | Run again in m minutes, if changed |
Robocopyの動作の理解
I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.
I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.
Robocopyは常にディレクトリ全体をコピーします
Robocopyの実行ごとにソースディレクトリと宛先ディレクトリが必要です。Robocopyはディレクトリ全体をコピーおよび移動します。Robocopyを使用して単一のファイルを明示的にコピーすることはできません。それにはcopy
またはPowerShellのCopy-Item
を使用してください。
ただし、以下で学ぶ適切なフィルタリングを使用すれば、単一のファイルをrobocopyでコピーすることができます。単一のファイルをrobocopyでコピーするには、ソースの直後にファイル名を指定したソースディレクトリと宛先ディレクトリを指定します。
構文は環境によって異なります
また、robocopyに提供するオプションは環境によって異なります。どのオプションを使用するかを判断しようとする際には、いくつかの質問に答える必要があります。
- いつも空のディレクトリにコピーするのでしょうか?
- 宛先ディレクトリに既にファイルが存在する可能性があるかどうかは分かりませんか?
- テラバイト単位のデータをコピーするのか、それとも数メガバイトだけですか?
- ファイルをネットワーク経由でコピーするのか、ローカルで行うのかはどちらですか?
- …その他
宛先フォルダにファイルが存在しない場合は、ファイルを上書きするオプションを心配する必要はありません。ファイルをネットワーク経由でコピーしない場合は、それに関連するオプションを心配する必要はありません。現在の状況と将来の可能性を明示的に定義してください。
デフォルトオプションを認識する
Robocopyはデフォルトで多くのオプションを使用します。上記の表を見ることでそれらを選択できます。また、ユーティリティを実行するたびに便利な出力も提供されます。
下記のように、基本オプション(ソースと宛先フォルダ)でrobocopyを実行したとき、自動的にいくつかのオプションが使用されました。デフォルトの動作を理解することは重要です。
出力で見えるオプションを、上記のオプションの説明と照らし合わせることで、robocopyが裏で何をしているのかを正確に理解できます。

robocopyのコマンドができることを理解する
copy
やPowerShellのCopy-Item
コマンドレットを使用したことがある場合、おそらくソースと宛先を指定して作業を進めたことがあるでしょう。設定できるオプションはあまりありません。これらのrobocopyコマンドにはデフォルトの動作があります。
一方、robocopyは非常に多くの機能を理解しており、動作を自由に調整することができます。
robocopyはファイルやディレクトリの概念に精通しているだけでなく、ファイルシステムのさまざまな要素もサポートしています。
A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:
- a timestamp (written, modified and accessed)
- NTFS ACL
- オーナー
- NTFS監査情報
- 非表示フラグ
- アーカイブフラグ
ファイルをコピーまたは移動する際に、必要に応じてこれらの情報を一緒に持っていくこともできます。
robocopyを実行する際に、単にファイルをコピーしているだけでなく、他の情報も潜在的にコピーしていることを理解し、robocopyに提供するオプションに考慮することが重要です。
基本: シミュレーションの実行
何も実行したくない巨大なファイルサーバーがある場合、robocopyを使用して実際に実行されることを確認できます。したであろうことを返します。
/L
オプションを使用すると、指定したすべてのファイルおよび/またはフォルダの列挙をrobocopyに指示し、コピー/移動されるファイルのリストを返します。
/L
オプションは他のオプションと組み合わせて使用することができます。これは、robocopyが使用するすべてのオプション(デフォルトまたはそれ以外)を返す素晴らしい方法です。指定したオプションに基づいてrobocopyがどのような動作をするかを全体的に把握することができます。

/L
基本: ファイルのコピー
robocopyの最も基本的な使用法は、オプションを指定せずにソースディレクトリと宛先ディレクトリを指定することです。
このオプションは、C:\srcからC:\dstへのすべてのファイル(サブフォルダを除く)をコピーします。
すべてのサブフォルダ(空のものも含む)とNTFSのアクセス許可も含め、すべてをコピーすることもできます。これは、私が見る限りでは、ファイルのディレクトリ全体を別のディレクトリに完全にコピーするための方法です。
以下では、すべてのNTFS ACL、ファイルオーナー、サブフォルダ(空のものも含む)およびすべてのファイル属性をコピーしています。これは、空のサブフォルダを含めるために/E
オプションを使用し、残りのすべてをキャッチするために/COPYALL
を使用して実現されています。
基本:ファイルの移動
ファイルの移動は、コピーと同様にファイルを1つのディレクトリから別のディレクトリに移動します。移動操作の唯一の違いは、ソースファイルがコピー後に削除されることです。
コピー後にソースからファイル/ディレクトリを削除するには、/MOV
オプションを使用します。これにより、指定されたディレクトリ内のすべてのファイル(サブフォルダなし)が削除されます。
/MOVE
を使用して、すべてのファイルとサブフォルダを移動することもできます。
基本:ファイルの同期
Robocopyを使用すると、2つのディレクトリを同期することができます。これは、宛先ディレクトリのすべてのファイルがソースディレクトリに存在し、それ以上存在しないことを保証することを意味します。/MIR
を使用すると、宛先に存在しないソースのすべてのファイルをコピーし、宛先に存在しないファイルを削除します。注意が必要です!
ネットワーク経由でファイルをコピーする場合、考慮すべきいくつかのオプションがあります。
Robocopyは、/Z
オプションを使用して「再開可能モード」でファイルをコピーすることができます。これにより、ファイルのコピーが開始されて途中で失敗した場合でも、完全に失敗する代わりにコピーを再開することができます。 /Z
オプションは、ストリームがネットワーク上で切断された場合に便利です。
警告:一部の人々は、
/Z
を使用するとパフォーマンスが1/4に低下すると報告しています。調査結果を教えてください。
/FFT
オプションも使用できます。このスイッチは、ネットワーク経由で転送する際に、より正確にファイルのタイムスタンプを保持することが知られています。このオプションは、NTFSではなくFATファイルシステムのタイムスタンプを使用します。
/IPG
を使用してインターパケットギャップを制御する
ファイルをネットワーク経由でコピーする際には、/IPG
スイッチを使用することができます。これは、インターパケットギャップオプションとも呼ばれます。このオプションは、robocopyが新しいパケットを送信する間に待機する頻度(ミリ秒単位)を定義します。
常にUNCパスを使用し、ドライブレターは使用しないようにしてください。
A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.
Robocopyバックアップモード(Robocopy /Z
)
Robocopyには、ファイルをバックアップモードでコピーするためのオプション(/B
)または再開可能モード(/ZB
)としてのバックアップがあります。ところで、「バックアップモード」とは何ですか?
通常、Windowsでファイルをコピーし、アクセスに管理者特権が必要なファイルに出くわすと、アクセス許可がないことを示すエラーが表示されます。ローカル管理者として実行していても、Windowsはアクセスを許可しません。
警告:Windows Server 2016 サーバーでデータをコピーする際に、デデュープリケーションがオンになっている場合には、破損したサーバーボリュームの報告があります。
/ZB
スイッチを使用すると、デデュープチャンクストアが “System Volume Information” 内で破損します。コピーされたファイルは読み取り不可能であり、操作しようとするとエラーが発生します。 詳細は、Serverfault リンクをご参照ください。
バックアップモードは、アクセス権限の心配なくファイルにアクセスする方法です。
Robocopy は、ファイルを読み取るために SeBackupPrivilege を使用し、必要なファイルにアクセスするために SeRestorePrivilege ユーザー権限を使用します。これにより、通常はアクセスできない ACE(アクセス制御エントリ)を無視します。
SeBackupPrivilege および SeRestorePrivilege ユーザー権限は通常、Backup Operators グループと Administrators グループのユーザーに割り当てられていますが、削除されることもあります。バックアップモードは、そのリスクを排除し、robocopy を実行するユーザーに一時的にこれらの権限を付与します。
自分のユーザーアカウントがこれらの権限を持っているかどうかを確認する場合、whoami /priv
を実行すると、両方の権限が表示されます。
ファイルとフォルダのフィルタリング
利用可能なオプションの大部分は、さまざまな基準に基づいてファイルとディレクトリを除外するためのものです。さまざまな基準に基づいて、どのようにファイルとディレクトリをフィルタリングまたは除外できるかをまとめました。
ファイル名またはファイルの拡張子で
Robocopy呼び出しでコピー/移動されるファイルをフィルタリングするには、ワイルドカードを使用します。特定のファイル名文字列または拡張子に一致するファイルをフィルタリングするためにワイルドカードを使用できます。
例えば、TXTファイルのみをコピーする場合、*.txtと指定できます。
「a」で始まるファイルのみを制限したい場合、a*と使用できます。
複数のファイル名一致セットを提供する場合は、以下のようにスペースで区切って指定します。
ファイル名でフィルタリングすると、robocopyは出力でフィルタを表示します。

ディレクトリ名で
Robocopyでは、ファイルだけでなくディレクトリ名でもアイテムをフィルタリングすることができます。特定の名前に一致するディレクトリを除外するには、robocopy /xd
を使用します。
複数のフォルダをコピーする場合は、/XD
スイッチを使用して実行からフォルダを除外します。
ファイル/ディレクトリのタイムスタンプで
以下に、さまざまなタイムスタンプ属性に基づいてファイルとフォルダを除外するためのすべてのrobocopyオプションが表示されます。
Switch | Explanation |
/DCOPY:T | Copy directory timestamps |
/MAXAGE:n | Exclude files older than n days/date |
/MINAGE:n | Exclude files newer than n days/date |
/XO | If destination file exists and is the same date or newer than the source, don’t overwrite |
/XN | If destination file exists and is the same date or older than the source, don’t overwrite |
タイムスタンプなどをフィルタリングする場合に選択できる2つの一般的なオプションがあります。/XO
と/MAXAGE
です。
/XO
は、ソースよりも新しい場合にのみファイルをコピーから除外することができます。/XO
オプションを使用すると、アクセス日付に基づいてrobocopyは新しいファイルのみをコピーできます。
ファイルの最大の年齢が分かっている場合は、/MAXAGE
オプションを使用することもできます。これにより、コピーされる前にファイルが持つことができる古い日付をYYYMMDD形式で指定できます。
Robocopy ジョブ
これまでに多くのオプションが利用可能であることがわかりました。これらのオプションはすぐに使いにくくなることがあります。幸いなことに、これらのオプションをすべて覚えて正確に指定する必要はありません。
Robocopy ジョブファイルは、1行に1つのオプションが含まれるテキストファイルです。通常、robocopy を使用してこれらのジョブファイルを作成します。作成した後は、robocopy を使用して変更するか、シンプルなテキストエディタを使用することができます。
ジョブと一緒に機能するさまざまな robocopy コマンドがあります。
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/JOB:jobname | Take parameters from the named job file | |||
/SAVE:jobname | Save parameters to the named job file | |||
/QUIT | Quit after processing command line | Useful for viewing parameters | ||
/NOSD | No source directory is specified | |||
/NODD | No destination directory is specified | |||
/IF | Include the following files |
A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob
. You can see that you can provide comments in the job file using ::
which is most of what this file has.
コメントがない場合、ファイルには1行に1つのオプションしか含まれません。
ジョブファイルの保存
ジョブファイルの保存は、構文の最後に/SAVE:<jobname>
オプションを追加するだけです。 <jobname>
をジョブの名前に置き換えます。 /SAVE
オプションにより、robocopy を実行したディレクトリに<jobname>.rcj という名前のファイルが作成されます。
最後のオプションとして /SAVE
を指定する必要があります。 /SAVE
の後に指定されたオプションはジョブファイルに追加されません。また、既存のジョブファイルがすでに存在している場合でも、robocopy は常に既存のファイルを上書きします。ジョブファイルをバックアップまたはバージョン管理してください!
注意: ジョブファイルへの保存時に
/MT
オプションを使用しようとすると、ジョブファイルには含まれません。これが含まれるようにできたかどうか、教えてください。
ジョブファイルの使用
ジョブがジョブファイルに保存されたら、/JOB:<jobname>
オプションを使用して、読み込むジョブファイルを指定できます。Robocopyはジョブファイル内のすべてのパラメータを読み込みます。その後、コマンドラインに直接オプションを指定したかのように実行されます。
ジョブを実行せずにジョブファイルを作成する/QUIT
の使用
/QUIT
オプションの目的は明らかではありません。表面上では、/QUIT
は実行中のジョブを終了させるように思えるかもしれません。しかし、/QUIT
は実際には最初からジョブを実行しないようにするオプションとして機能します。
公式には、/QUIT
オプションは「robocopyにコマンドラインの処理を終了させる」とされています。ただし、ジョブを実行せずにジョブファイルを作成するという説明の方が適切です。
/SAVE
オプションを使用すると、ジョブは自動的に実行されます。ジョブを実行する前にジョブファイルを作成する方法はありません。テキストエディタを使用してRCJジョブファイルを作成するか、robocopyを使用して/QUIT
を末尾に追加することができます。
ジョブファイルの編集
ジョブファイルはテキストファイルなので、お気に入りのテキストエディタで編集することができます。または、robocopyに編集させることもできます。
/JOB
、/SAVE
、/QUIT
の組み合わせを使用してジョブファイルを編集することができます。
たとえば、ジョブファイルbackupfiles.rcjに保存されているrobocopyジョブからすべてのEXEファイルを除外したい場合を考えてみましょう。すでにジョブファイルを作成しており、全体を上書きしたくありません。以下のように新しいオプションを追加できます:
複数のジョブファイルの使用
同じ実行で複数のジョブファイルを指定する場合、その実行で使用されるすべてのオプションが組み合わされます。
例えば、backupfilesコピーのジョブから除外するファイルの大きなリストがあるとします。テキストエディタを開き、以下を追加してexclude.rcjファイルを作成します。
次に、backupfilesジョブからこれらのファイルを除外することができます。
元のbackupfilesジョブファイルは既にすべてのEXEファイルを除外しているため、上記の実行の構文は/XF *.exe a.exe b.txt c.cer
になります。Robocopyはすべてのオプションを一つに組み合わせます。
Robocopyテンプレートと/NOSD
および/NODD
オプションの使用
多くのジョブファイルを使用している場合、ジョブファイルがパラメータを受け入れるようにすることができます。Robocopyでは、ジョブが実行されるときにコマンドラインから値を渡すことができます。 パラメータはrobocopy用語ではありませんが、このシナリオには適しています。
ソースディレクトリまたは宛先ディレクトリを明示的に指定せずに、/NOSD
および/NODD
オプションを使用するか、ソースと宛先ディレクトリを含めないようにして、robocopyジョブがパラメータを受け入れるようにすることができます。
単純な例として、以下の構文を使用してソースまたは宛先が指定されていないジョブファイルを作成します。このジョブの目的は、ソースディレクトリから宛先ディレクトリにあるすべてのTXTおよびEXEファイルをコピーすることです。
単体では、このジョブは動作しません。なぜなら、ソースまたは宛先ディレクトリが指定されていないからです。
ソースと宛先のディレクトリを指定せずにジョブを作成すると、ジョブファイルは自動的に/NOSD
と/NODD
オプションを使用して作成されます。
/NOSD
オプションは、ソースディレクトリが含まれていないことをrobocopyに伝えます。一方、/NODD
は宛先ディレクトリが含まれていないことを示します。このジョブファイルは他のジョブの「テンプレート」となります。
ただし、このジョブファイルには「パラメータ」を渡すことで、ソースディレクトリと宛先ディレクトリを指定することもできます。
作成したジョブファイルを使用してC:\srcからC:\dstにファイルをコピーするには、これらのディレクトリをコマンドラインで直接渡すことができます。
非同期コピー(Robocopy /MT
)
デフォルトでは、robocopyは一度に1つのファイルのみ処理します。しかし、/MT
オプションを使用することで、同時により多くのファイルをコピーすることができます。
/MT
オプションを使用すると、robocopyがファイルをコピーするために使用するスレッドの数を指定することができます。最大数は128です。
次のように/MT
を使用できます:
I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.
/MT
を使用する場合、/IPG
や/EFSRAW
を使用することはできません。より良いパフォーマンスのために、ログをコンソールに出力せずに/LOG
を使用してください。
Robocopyのスケジュール設定
Robocopyには、実行するタイミングをスケジュールする方法がいくつかあります。
/RHを使用することで、
/RH
オプションを使用すると、特定の時間帯にrobocopyを実行するよう指定することができます。これは、メンテナンスウィンドウや、誰もいない時間帯に実行する場合に便利です。
開始時間と終了時間をHHMM-HHMMの形式で指定することができます。たとえば、システムの時計によって定義された17時から9時までの間にrobocopyを実行する場合は、次のコマンドを実行します:
これにより、指定した時間帯外でrobocopyを実行しようとすると、現在の時刻が表示され、開始時間まで待機することになります。

両方の時間が24時間形式であり、正確に4桁であることを確認する必要があります。ウィンドウは2分以上である必要があります。
デフォルトでは、/RH
を使用すると、全体の実行前に開始時間がチェックされます。ただし、多くのファイルがある場合や、プロセスがそれ以上の時間を要する可能性がある場合は、/PF
オプションを使用できます。/PF
を使用すると、robocopyは各ファイルの前にウィンドウをチェックするようになります。
タスクスケジューラの使用
出力ログ
robocopyは常に出力ログを返します。そのログがコンソール上でstdoutとして表示されるか、ログファイルにリダイレクトされるかは、あなた次第です。
robocopyの出力を表示するオプションがたくさんあります。
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/NP | No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file. | |||
/unicode | Display the status output as unicode text | |||
/LOG:file | Output status to log file and overwrite | |||
/UNILOG:file | Output status to unicode log file and overwrite | |||
/LOG+:file | Output status to log file and append to existing log file | |||
/UNILOG+:file | Output status to unicode log file and append to existing log file | |||
/TS | Displays the file timestamps for every file processed. | |||
/FP | Replaces simple file names with full file pathnames in the output. | |||
/NS | Does not show file sizes. | |||
/NC | Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged | |||
/NDL | Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files. | |||
/TEE | Output to console window, as well as the log file | |||
/NJH | No job header | |||
/NJS | No job summary | |||
/BYTES | Print sizes as bytes | |||
/X | Report all files, not just those selected & copied | |||
/V | Produce verbose output log, showing skipped files | |||
/ETA | Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish). | |||
/DEBUG | Show debug volume information |
/NJS
と/NJH
でログの要素を制限する
デフォルトでは、robocopyは出力にジョブヘッダーとジョブの概要の2つの要素を含みます。
ジョブヘッダーは、上部にあるシンプルなROBOCOPYヘッダーです。

ジョブの概要では、すべてのファイル/フォルダの概要ステータス、転送されたデータ量、および実行が終了した時刻が表示されます。

ジョブヘッダーを非表示にするには、/NJH
オプションを使用し、ジョブの概要を非表示にするには、/NJS
オプションを使用します。これらのオプションのいずれかまたは両方を含めることができます。

出力ログをファイルにリダイレクトする
出力ログを保存する必要がある場合、テキストファイルにリダイレクトするか、コンソールに表示することができます。これは、>
、>>
、PowerShell、または/LOG
オプションを使用して行うことができます。
既存のログファイルを上書きするために/LOG:<ファイルパス>
の構文を使用して、出力ログをファイルにリダイレクトするには、以下のようにします。コンソールに表示されるのはログファイルへのパスのみです。
既存のログファイルの内容を保持し、結果をファイルに追加する場合、以下のように+
演算子を使用できます。
出力ログをファイルにリダイレクトしてコンソールに表示する
出力ログをファイルに保存し、コンソールにも表示する場合、/TEE
オプションを使用します。このオプションにより、robocopyは出力をログファイルに書き込みながら、デフォルトの動作である出力をコンソールに返すことができます。
終了コード
他のすべてのコマンドラインユーティリティと同様に、robocopyも実行結果に応じて終了コードを返します。robocopyが常に0
で正常に終了することを望みますが、常にそうなるわけではありません。
以下に、robocopyが返すすべての終了コードとその説明があります。7より大きい終了コードは、実行中に少なくとも1つのエラーが発生したことを示します。
Exit Code | Explanation |
0 | No action performed. Source and destination are synchronized. |
1 | At least one file was copied successfully. |
2 | Extra files or directories were detected. Examine log. |
3 | Exit codes 2 and 1 combined. |
4 | Mismatched files or directories found. Examine log. |
5 | Exit codes 4 and 1 combined. |
6 | Exit codes 4 and 2 combined. |
7 | Exit codes 4, 1 and 2 combined. |
8 | At least one file or directory could not be copied. Retry limit exceeeded. Examine log. |
16 | Copy failed catastrophically. |
なお、robocopyをサードパーティのユーティリティで実行している場合、そのユーティリティは非ゼロの終了コードをエラーと見なす場合があります。これを防ぐために、1を返す場合に終了コードを0に変更することができます。
Robocopyの「余分な」ファイルの終了コードは、宛先フォルダに「余分な」ファイルがあるが、ソースフォルダにはないことを意味する一般的な終了コードです。このコードは、削除を防ぐための余分なファイルを除外します。
バッチファイルでの終了コードの変更
バッチファイルでrobocopyを実行している場合、%ERRORLEVEL%
変数の値を確認できます。1を返す場合は、exit
キーワードを使用してスクリプトを0で終了します。
PowerShellスクリプトでの終了コードの変更
PowerShellスクリプトでrobocopyを実行している場合、Start-Process
を使用してrobocopyを呼び出し、PassThru
を使用して作成されたプロセスを返し、Wait
でrobocopyの終了を待機することができます。その後、ExitCode
プロパティをチェックして値が1であるかどうかを確認できます。終了コードが1の場合は、$host.SetShouldExit()
を使用してPowerShellスクリプトを0で終了します。
一般的なエラー
数千のファイルを扱っている場合、いくつかの問題が発生する可能性があります。以下は、私が遭遇した一般的なエラーの概要です。
エラー: 無効なパラメータ
エラー: 無効なパラメータというエラーが表示された場合、通常はrobocopyにオプションを正しい順序で渡そうとしたことを意味します。 robocopy無効なパラメータ3エラーが最も一般的です。
A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.
Robocopyの例
自分でrobocopyの文字列を作成することもできますし、他の人が学んだ内容を利用することもできます! このセクションでは、さまざまなタスクを達成するためにrobocopyを使用する方法について説明します。
ネットワークフォルダのディレクトリサイズを検索する
投稿者: northendtroooper (Reddit)
フォルダの内容をすばやく削除する(サブフォルダのアクセス権を無視)
投稿者: pizzasteveo (Reddit)
大規模なファイル移行を実行する
投稿者: @MySnozzberries (Twitter)
このスニペットの目的は、すべてのファイルの所有権を管理者に強制することです。その後、継承も設定しているため、すべてのオブジェクトに対して管理者グループの明示的なACEを追加して、完全な制御を設定します。
最後に、DACLを持つ完全なrobocopyコピーをログと共に宛先に実行します。ログは追加の権限の問題やファイルのロックを確認するためにレビューでき、後で別のデルタ同期を実行できます。
すべてのファイルとディレクトリの所有者として、管理者グループを再帰的に強制的に設定します。これには回避策があるかもしれませんが、これは最も厳格なアプローチであり通常最も速い方法です。
所有者となった後、すべてのオブジェクトに対して新しいACEをDACLに強制的に追加できます。これにより、管理者にフルコントロールが与えられ、継承が有効になり、パスを再帰的にたどることができます。
これをルートで設定すると、環境全体がカバーされますが、共有にはCREATOR OWNERとフルコントロールが設定されている場合(残念ながら、これはMicrosoftのファイルユーザープロファイルストアなどに対する推奨事項です)、ユーザーは自身の裁量で継承を無効にしたり、ACEを削除したりできます。そのため、厳格なアプローチが通常最も速い修正方法です。
ほとんどのファイルのDACLを変更した後、ファイルのコピーを新しい場所に試みます。これは、ファイル共有の移行などに一般的に使用されます。再帰的にアイテムをコピーし、/SEC
スイッチを使用してデータ/属性/タイムスタンプ/DACLもコピーします。
その後、操作をフルパスでログに記録します。すべてのオブジェクトに対して(/V
の詳細スイッチを使用)ログに記録するため、一般的にはパスの長さやファイルのロックに関連するエラーの<5%を再処理できます。
これは、ユーザーエクスペリエンスへの最小限の影響でファイル共有の移行を管理するためのシンプルなフレームワークです。また、IT部門がデータに対して保持する制御を向上させます。顧客が子フォルダレベルで所有権を適切に管理する強力なデータガバナンスプラクティスを持っている場合、これはより複雑な議論になりますが、ほとんどの顧客は継承とグループベースのACEのみを使用しているため、これが最も一般的な状況と修正方法です。
Robocopyの代替
Robocopyは素晴らしいツールですが、それと似たような他のツールもたくさんあります。
- xxcopy – オプションがたくさんあるコマンドラインユーティリティです。
- Copy-Item PowerShellコマンドレット – 機能はそれほど多くありませんが、はるかにシンプルです。
- TreeSize – フォルダ情報を見つけるためのGUIとスクリプト可能なユーティリティです。
要約
Robocopyは大量のファイルをコピーする優れたツールです。データの移行を行ったり、フォルダを同期させたり、単にファイルを正確にコピーする必要がある場合には、robocopyは素晴らしい選択肢です。