Robocopyは、Windowsで大量のデータをコピーするために最も使用されるコマンドラインユーティリティの一つです。 それはそれがどれほど強力であるかのためにそのような人気のあるツールです。 しかし、すべてのその力で複雑さが来ます。 このガイドでは、その複雑さをすべて分解し、この便利なツールの使用に関する完全なチュートリアルを提供します。
Robocopyは、Windows NT以降に利用可能になったWindowsコマンドラインユーティリティです。 これは、汎用性の低いxcopyユーティリティの代替品です。 コマンドプロンプトでファイルをコピー/移動するドライブパスまたはサーバーパスを指定できます。
この記事の執筆時点でのRobocopyのバージョンは10.0.18までです。 これは私が私のテストを行ったバージョンです。
Robocopyには、効率的かつ高速なファイルコピーと移動を実行するために活用できる多数の機能が用意されています。 それはできます:
- レジューム機能を持つネットワーク経由でファイルをコピーする
- 無限ループから失敗を引き起こすNTFSジャンクションポイントをスキップできる
- タイムスタンプを保持するファイルとディレクトリ属性をコピーできる
- NTFSアクセス許可、所有者、および監査情報をコピーできる
- ディレクトリのタイムスタンプをコピーできる
- ディレクトリのタイムスタンプをコピーできる
- ファイルが確実にコピーされるようにするためのbackup’モードこれらの権限が管理者に拒否されていても
- 自動再試行
- 二つのフォルダを同期できます
- は、256文字のパス制限を超えるパスをコピーできます。
- は、マルチスレッド機能を使用して非同期コピーを実行します。
- スクリプトで使用するための標準化された終了コードを返します
あなたが見ることができるように、コピーすることがたくさんあります。 私はあなたがこの便利なツールについて知る必要があるすべてをカバーしたかったです。
目次
共通Robocopy構文リファレンス
なぜ、単一のユーティリティ上のこのような長いブログ記事? ただ、以下のテーブルの上にあなたの目をごちそう。 あなたはrobocopyでファイルをコピーまたは移動するための多くのオプションを持っています! あなたは、個々のセクションでより多くのオプションになります。
これらのテーブルは、robocopy /?
から返されたヘルプ構文から構築されました。 彼らはより意味のあるセクションに分割され、時間の経過とともに追加され、より有用な情報を提供するためにクリーンアップされました。
ソースオプション
説明 | デフォルトの動作 | 同等のスイッチ | 注意事項 | |
/s | サブフォルダのコピー | |||
/E | 空のサブフォルダを含むサブフォルダのコピー | |||
/COPY: | Copyオプション | /COPY:DAT | D=データ、A=属性、T=タイムスタンプS=セキュリティ=NTFS Acl、O=所有者情報、U=監査情報。 ファイル-データ(D)には、常にファイル-タイムスタンプ(T)が含まれています) | |
/SEC | セキュリティ付きのファイルのコピー | /コピー:DATS | ||
/DCOPY:t | ディレクトリのタイムスタンプをコピーします | |||
/COPYALL | すべてのファイル情報をコピー | /COPY:DATSOU | これにより、オフラインファイルの脱水が防止され、代わりにファイルのタグがコピーされます(少なくともemc VNX/Unityシステムでは)。 これは公式に文書化されていません! 脱水が必要な場合(この問題が見つかった理由)、ファイルに沿ってAclをコピーすることはできません。 クレジット:ムッシュX(Redditの) | |
/NOCOPY | ファイル情報をコピーしない | /パージで便利 | ||
/A | Archive属性が設定されているファイルのみをコピーします | |||
/M | /Aと同様ですが、ソースファイルからArchive属性を削除します | |||
/レフ:n | ソースツリーの上位nレベルのみをコピーします | |||
/MAXAGE:n | 最大ファイル保存期間–n日/日より古いファイルを除外します | |||
/MINAGE:n | 最小ファイル保存期間–n日/日より新しいファイルを除外します | n<1900の場合、n=日数なし、それ以外の場合n=YYYYMMDD日付 | ||
/FFT | FATファイルの時間を仮定します。 | 2-秒の日付/時刻の粒度。 これにより、NTFSタイムスタンプが置き換えられます。 ネットワーク経由で転送する場合は、より信頼性が高いようです。 | ||
/256 | 非常に長いパスをオフにする(>256文字)サポート |
宛先オプション
説明 | デフォルトの動作 | 同等のスイッチ | 注意事項 | |
/A+: | 宛先ファイルのファイル属性を設定+追加 | |||
/A-: | コピー先ファイルのファイル属性を削除する | |||
/FAT | 8を使用して宛先ファイルを作成します。3FATファイル名のみ | |||
/CREATE | ディレクトリツリー構造+長さゼロのファイルのみを作成します | |||
/DST | 1時間のDST時間差を補正 |
コピーオプション
説明 | デフォルトの動作 | 同等のスイッチ | 注意事項 | |
/L | リストファイルのみ | ファイルをコピー、タイムスタンプ、または削除しないでください | ||
/MOV | ファイルの移動 | コピー後にソースから削除する | ||
/移動 | ファイルとディレクトリの移動 | コピー後にソースから削除する | ||
/sl | ターゲットの代わりにファイルのシンボリックリンクをコピーする | |||
/Z | 再起動可能モードでファイルをコピーする | ネットワークを生き残る グリッチ | ||
/B | バックアップモードでファイルをコピーする | |||
/j | バッファなしI/Oを使用したコピー | 大きいファイルのために推薦される | ||
/NOOFFLOAD | Windowsのコピーオフロードメカニズムを使用せずにファイルをコピーする | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | EFS RAWモードを使用して暗号化されたファイルをコピーする | |||
/TIMFIX | スキップされたファイルでも、すべてのファイルのファイル時間を修正します | |||
/XO | 古いものを除外 | 宛先ファイルが存在し、ソースと同じ日付またはそれ以降の場合は、上書きしないでください。 | ||
/XC | 変更されたファイルを除外する | |||
/XN | 新しいファイルを除外する | |||
/XX | 宛先に存在するファイルを除外しますが、ソースには存在しません | /XX | ||
/XFファイル… | 指定された名前/パス/ワイルドカードに一致するファイルを除外します | |||
/XD dirs… | 指定された名前/パスに一致するディレクトリを除外します。 | /XFおよび/XDは、ROBOCOPYなどの組み合わせで使用することができます。c:\source d:\dest /XF*.ドク*.xls/XD c:\unwanted /S | ||
/IA: | 指定された属性のいずれかを持つファイルをインクルードします | |||
/XA: | 指定された属性のいずれかを持つファイルを除外します | |||
/IM | 変更されたファイルを上書きします。 これには、異なる時間の同じファイルが含まれます。 | |||
/ | は、すでに同じファイルであってもファイルを上書きしますか | |||
/それ | 微調整されたファイルが含まれています | |||
/XJ | ソースからジャンクションポイントを除外 | /XJ | ||
/XJD | ソースディレクトリからジャンクションポイントを除外する | |||
/XJF | からジャンクションポイントを除外 ソースファイル | |||
/最大:n | nバイトより大きいファイルを除外する | |||
/MIN:N | nバイトより小さいファイルを除外する | |||
/MAXLAD:n | n以降未使用のファイルを除外する | |||
/ミンラッド:n | n以降で使用されるファイルを除外する | n<1900の場合、n=n日、それ以外の場合はN=YYYYMMDD日 | ||
/MIR | ディレクトリツリーをミラーリングする | /パージ/E | ||
/パージ | ソースに存在しなくなったdestファイル/フォルダを削除する | |||
/XL | ソースに存在するファイルを除外しますが、宛先には存在しません | |||
/Secfix | Robocopy/secfix修正ファイル すべてのファイル、スキップされたファイルのセキュリティ。 | 次のいずれかのオプションを使用して、コピーするセキュリティ情報のタイプを指定します。/COPYALL/COPY:O/COPY:S/COPY:U/SEC | ||
/ZB | 再起動可能モードを使用し、アクセスが拒否された場合はバックアップモードを使用します |
監視オプション
説明 | デフォルトの動作 | 同等のスイッチ | 注意事項 | |
/R:n | 失敗したコピーの再試行回数 | /R:1000000 | 常にこのオプションを設定してみてください。 再試行する時間を無駄にしないために、これを10-20に設定することをお勧めします。 | |
/W:n | 再試行間の待ち時間 | /W:30 | より迅速に再試行するには、このオプションを常に低い数値に設定してみてください。 私は5-10をお勧めします。 | |
/REG | /R:nと/W:nを既定の設定としてWindowsレジストリに保存します | |||
/RH:hhmm-hhmm | 新しいコピーを開始できる時間 | |||
/TBD | 共有名が定義されるのを待ちます | 再試行エラー67 | ||
/PF | ファイル単位(パス単位ではない)での実行時間のチェック | |||
/MON:n | nより多くの変更が見られたときに再び実行します | |||
/MOT:m | 変更された場合は、m分で再度実行します |
Robocopyの動作を理解する
私は今、あなたに利用可能な潜在的な構文オプションのすべてであなたの心を完全に吹き飛ばしました。 ここで、この構文を使用する方法のさまざまな組み合わせをすべて見てみましょう。
私はあなたにますます増え続けるスイッチを持つrobocopyコマンドの非常に長いリストを提供することができます。 しかし、私はそれがどのように魚を教える方が良いと思います。 のは、これらのオプションのすべてのうち、意味を置く方法の上に行きましょう。
Robocopyはディレクトリ全体のみをコピーします
すべてのrobocopy実行には、ソースディレクトリと宛先ディレクトリがあります。 Robocopyは、ディレクトリ全体でファイルをコピーして移動します。 Robocopyで単一のファイルを明示的にコピーすることはできません。 そのためにはcopy
またはPowerShellのCopy-Item
を使用します。
ただし、以下で学ぶ適切なフィルタリングで単一のファイルをロボコピーすることができます。 単一のファイルファイルをrobocopyするには、ソースディレクトリとコピー先ディレクトリの直後にソース内のファイル名を指定します。
> robocopy c:\src d:\dst copythisfile.txt
構文は環境に依存します
また、robocopyに提供するオプションは環境に依存します。 使用するオプションを把握しようとするときは、いくつかの質問に答える必要があります。
- 常に空のディレクトリにコピーしますか?
- ファイルが宛先ディレクトリに既に存在する可能性はありますか?
- テラバイトのデータをコピーするのか、それとも数メガバイトのデータをコピーするのか?
- ネットワーク経由またはローカル経由でファイルをコピーしますか?
- …そしてもっと。
宛先ファイルディレクトリにファイルがない場合は、ファイルを上書きするオプションを気にするべきではありません。 ネットワーク経由でファイルをコピーしない場合は、これらのオプションについて心配しないでください。 あなたの環境があるあなたの現在および潜在的な未来の状況を明示的に定義しなさい。
デフォルトのオプションを認識
Robocopyはデフォルトで多くのオプションを使用します。 あなたは上記の表を見てそれらを選ぶことができます。 また、ユーティリティを実行するたびに便利な出力を提供します。Robocopyを最も基本的なオプション(ソースと宛先フォルダ)で実行したときに、いくつかのオプションが自動的に使用されていることがわかります。 デフォルトの動作を理解することは重要です。
上記のオプションの説明で出力に表示されるオプションを参照すると、robocopyがカバーの下で何をしているのかを正確に理解できます。
Robocopyコマンドが何を行うことができるかを理解する
copy
またはPowerShellのCopy-Item
コマンドレットを使用した場合は、おそらくソースと宛先を指定して、その日に行 そこに設定できるオプションはあまりありません。 これらのrobocopyコマンドにはデフォルトの動作があります。
しかし、robocopyは、一方で、より多くを理解し、あなたが好きなだけ動作を微調整する柔軟性を提供します。
robocopyがファイルやディレクトリの概念を認識しているだけではないことを知っておくことが重要です。 ファイルシステムにはそれ以上のものがあり、robocopyはほぼすべてをサポートしています。
ファイルシステム上に座っているファイルは、単一の目的を持つダムオブジェクトではありません。 ファイルの概念にはさまざまな属性やものがあります。 たとえば、ファイルには次のような属性があります:
- タイムスタンプ(書き込み、変更、アクセス)
- NTFS ACL
- 所有者
- NTFS監査情報
- 隠しフラグ
- アーカイブフラグ
ファイルをコピーまたは移動あなたがしたい場合は、それと一緒にそのようなもののすべてを持参するオプション。
robocopyを実行すると、ファイルをコピーするだけでなく、他のすべての情報もコピーする可能性があることを理解しています。 それを認識し、robocopyを提供するオプションでそれを考慮することが重要です。
: WhatIfシナリオの実行
移行したい場所に巨大なファイルサーバーがあり、まだ何もしたくない場合は、robocopyを使用して行ったことを返すことができます。
/L
オプションを使用すると、robocopyに指定したすべてのファイルやフォルダを列挙し、コピー/移動したファイルのリストを返すように指示できます。
/L
オプションは他のオプションと一緒に使用できます。 これは、robocopyが使用していたすべてのオプション(デフォルトかどうか)を返す素晴らしい方法です。 それはあなたがそれを提供したオプションを与えられたrobocopyが何をするかの全体的なビューを与えるでしょう。
基本:ファイルのコピー
robocopyの最も基本的な使用法は、オプションなしでソースと宛先ディレクトリを使用することです。
> robocopy C:\src C:\dst
このオプションは、すべてのファイル(サブフォルダを除く)をコピーします。C:\src にC:\dst…..
サブフォルダ(空かどうか)やNTFS権限を含むすべてのものをコピーすることもできます。 これは、私が言うことができることから、ファイルのディレクトリに関するすべてを別のディレクトリに文字通りコピーする方法です。以下では、すべてのNTFS Acl、ファイル所有者、サブフォルダ(空のものを含む)、およびすべてのファイル属性をコピーしています。 このすべては、すべての空のサブフォルダを含めるための/E
オプションと、残りの部分をキャッチするための/COPYALL
だけで可能になります。
> robocopy C:\src C:\dst /E /COPYALL
基本:ファイルの移動
ファイルの移動は、コピーと同じように、あるディレクトリから別のディレクトリにファイルを転送します。 移動操作との唯一の違いは、コピー後にソースファイルが削除されることです。
コピー後にソースからファイル/ディレクトリを削除するには、/MOV
オプションを使用します。 これにより、指定されたディレクトリ内のすべてのファイルが削除されます(サブフォルダは削除されません)。
> robocopy C:\src C:\dst /MOV
/MOVE
を使用して、すべてのファイルとサブフォルダを移動することもできます。
> robocopy C:\src C:\dst /MOVE
基本:ファイルの同期
Robocopyでは、二つのディレクトリを同期することができます。 これは、宛先ディレクトリ内のすべてのファイルがソースディレクトリにあり、それ以上ないことを /MIR
は、コピー先にないソース内のすべてのファイルをコピーしてデータを複製し、コピー元にないコピー先のファイルを削除します。 注意してください!
> robocopy C:\src C:\dst /MIR
ネットワーク経由でファイルをコピーする
ネットワーク経由でファイルをコピーする場合は、いくつかのオプションを考慮する必要があります。
Robocopyでは、/Z
オプションを使用して”再起動可能モード”でファイルをコピーできます。 つまり、ファイルがコピーを開始して途中で失敗した場合、コピーは完全に失敗するのではなく、再び開始できます。 /Z
オプションは、ストリームがネットワーク経由で切断される場合に便利です。
警告:
/Z
を使用するとパフォーマンスが1/4削減されると報告されています。 私にあなたの調査結果を知らせなさい。
/FFT
オプションを使用することもできます。 このスイッチは、ネットワーク経由で転送するときにファイルのタイムスタンプをより正確に保持することが知られています。 このオプションでは、NTFSの代わりにFATファイルシステムのタイムスタンプが使用されます。
robocopy C:\src \SRV1\share /Z /FFT
/IPGを使用してパケット間ギャップを制御する
ネットワーク経由でファイルをコピーする場合は、/IPG
スイッチを使用できます。 これはinter-packet gapオプションとも呼ばれます。 このオプションは、robocopyが新しいパケットを送信するまで待機する頻度をミリ秒単位で定義します。
常にドライブ文字ではなくUNCパスを使用する
Redditの読者は、マップされたドライブを宛先ディレクトリとして使用しない難しい方法を発見しました。 代わりに、ALWAYS use ALWAYS USE UNCパスを使用します。 そうすると、256文字の制限に問題が発生する可能性があります。 詳細については、このMicrosoft docをチェックしてください。
Robocopyバックアップモード(Robocopy/Z)
Robocopyには、バックアップモードでファイルをコピーするオプション(/B
)または再起動可能モードへのバックアップ(/ZB
)があります。 とにかく”バックアップモード”とは何ですか?
通常、Windowsでファイルをコピーし、アクセスするために管理者権限を必要とするファイルをヒットすると、権限がないことを示すエラーが表示されます。 ローカル管理者として実行している場合でも、Windowsはアクセスを許可しません。
警告:重複排除をオンにしてWindows Server2016サーバーにデータをコピーすると、サーバーボリュームが破損しているという報告がありました。
/ZB
スイッチを使用すると、結果はシステムボリューム情報に破棄されている重複排除チャンクストアになります。 コピーされたファイルは読み取りできず、操作しようとするとエラーが発生します。 より多くの情報とServerfaultリンク。
バックアップモードは、アクセス許可を心配せずにファイルにアクセスする方法です。
Robocopyはバックアップモードを使用して、ファイルの読み取りにSeBackupPrivilegeを使用し、必要なファイルにアクセスするにはSeRestorePrivilegeユーザー権限を使用します。 これにより、通常はこれらのファイルにアクセスできないAceは無視されます。
SeBackupPrivilegeおよびSeRestorePrivilegeユーザー権限は、通常、Backup OperatorsグループおよびAdministratorsグループのユーザーに割り当てられますが、削除されることがあります。 バックアップモジュールは、そのリスクを排除し、一時的にrobocopyを実行しているユーザーにそれらの権利を付与します。
ユーザーアカウントにその権限があるかどうかを確認したい場合は、whoami /priv
を実行すると、両方の権限が表示されます。
ファイルとフォルダのフィルタリング
利用可能なオプションの大部分は、ファイルとディレクトリをさまざまな方法で除外することです。 私は、さまざまな基準に基づいてファイルとディレクトリをフィルタリングまたは除外する方法をすべて分解しました。
ファイル名またはファイル拡張子による
robocopy呼び出しでコピー/移動されるファイルのフィルタリングは、ワイルドカードを使用して行われます。 ワイルドカードを使用して、特定のファイル名の文字列または拡張子に一致するファイルをフィルター処理できます。
たとえば、TXTファイルのみをコピーするには、*を指定できます。txt。
> robocopy C:\src C:\dst *.txt
aで始まるファイルのみに制限したい場合は、*を使用できます。
> robocopy C:\src C:\dst a*
Y0Uは、以下に示すようにスペースで区切ることによって、複数のファイル名の一致セットを提供することもできます。
> robocopy C:\src C:\dst a* b*
ファイル名でフィルタリングすると、robocopyは出力にフィルタを表示します。
ディレクトリ名で
Robocopyを使用すると、ファイルだけでなくディレクトリ名でも項目をフィルタリングできます。 robocopy /xd
を使用すると、特定の名前に一致する特定のディレクトリを除外できます。
複数のフォルダをコピーする場合は、/XD
スイッチを使用してフォルダを実行から除外します。
> robocopy C:\src C:\dst /XD "c:\src\exclude"
By File/Directory Timestamp
以下に、さまざまなtimestamp属性に基づいてファイルとフォルダを除外するすべてのrobocopyオプションがあります。
スイッチ | 説明 |
/DCOPY:t | ディレクトリのタイムスタンプをコピーします |
/MAXAGE:n | n日/日より古いファイルを除外する |
/ミナージュ:n | n日/日より新しいファイルを除外する |
/xo | コピー先ファイルが存在し、コピー元ファイルと同じ日付または新しい場合は、上書きしないでください |
/XN | コピー先のファイルが存在し、コピー元のファイルと同じ日付または古い場合は、上書きしないでください |
タイムスタンプのようなものでフィルタリングするときに選択する2つの一般的なオプションがあります。/XO
と/MAXAGE
。
/XO
は、ファイルがソースよりも新しい場合にのみコピーから除外できます。 /XO
オプションを使用すると、アクセス日別に新しいファイルのみをロボコピーできます。
> robocopy C:\src C:\dsc /XO
最大年齢ファイルがわかっている場合は、/MAXAGE
オプションを使用することもできます。 これにより、ファイルがコピーされる前に持つことができる古い日付をYYYMMDD形式で指定することができます。
> robocopy c:\src c:\dst /S /MAXAGE:20191001
Robocopy Jobs
あなたは何十ものオプションがあなたに利用可能であることを見てきました。 これらのオプションがすぐに扱いにくくなるのは簡単です。 ありがたいことに、あなたは記憶し、これらのオプションのすべてが毎回スポットであることを確認するよりも良いオプ
Robocopyジョブファイルは、1行に1つのオプションを含むテキストファイルです。 通常、これらのジョブファイルを作成するにはrobocopyを使用します。 作成したら、robocopyを使用してそれらを変更するか、単純なテキストエディタのいずれかを使用できます。
ジョブで動作するさまざまなrobocopyコマンドがあります。
説明 | デフォルトの動作 | 同等のスイッチ | 注意事項 | |
/JOB:jobname | 指定されたジョブファイルからパラメーターを取得します | |||
/保存:jobname | パラメーターを指定したジョブファイルに保存します | |||
/終了 | コマンドラインの処理後に終了 | パラメータを表示するのに便利 | ||
/NOSD | ソースディレクトリが指定されていません | |||
/NODD | 宛先ディレクトリが指定されていません | |||
/ | に次のファイルが含まれている場合 |
robocopyで作成された一般的なジョブファイルには、RCJ拡張子があり、以下のスニペットのようになります。 このジョブファイルは、robocopy C:\src D:\dst /save:myjob
を実行して作成されました。 このファイルのほとんどである::
を使用して、ジョブファイルにコメントを提供できることがわかります。
コメントなしでは、ファイルには1行に1つのオプションしか含まれません。
:::: Robocopy Job C:\MYJOB.RCJ:::: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM:::::: Source Directory ::: /SD:C:\SRC\ :: Source Directory.:::: Destination Directory ::: /DD:C:\SRC\ :: Destination Directory.:::: Include These Files ::: /IF :: Include Files matching these names:: *.* :: Include all names (currently - Command Line may override):::: Exclude These Directories ::: /XD :: eXclude Directories matching these names:: :: eXclude no names (currently - Command Line may override):::: Exclude These Files ::: /XF :: eXclude Files matching these names:: :: eXclude no names (currently - Command Line may override):::: Copy options ::: /DCOPY:DA :: what to COPY for directories (default is /DCOPY:DA). /COPY:DAT :: what to COPY for files (default is /COPY:DAT).:::: Retry Options ::: /R:1000000 :: number of Retries on failed copies: default 1 million. /W:30 :: Wait time between retries: default is 30 seconds.:::: Logging Options :::
ジョブファイルの保存
ジョブファイルの保存は、構文の最後に/SAVE:<jobname>
オプションを追加するのと同じくらい簡単です。 <jobname>
をジョブの名前に置き換えます。 130>オプションを指定すると、<jobname>という名前のファイルが作成されます。robocopyを実行したディレクトリ内のrcj。
> robocopy C:\src C:\dst /SAVE:myjob
最後のオプションとして/SAVE
を指定する必要があります。 /SAVE
の後に指定されたオプションは、ジョブ-ファイルに追加されません。 また、既存のジョブファイルが既に存在していても、robocopyは常に既存のジョブファイルを上書きします。 ジョブファイルのバックアップまたはバージョン管理!注:ジョブファイルに保存するときに/MT
オプションを使用しようとすると、ジョブファイルには含まれません。 あなたがこれを含めることができたかどうか私に知らせてください。
ジョブファイルの使用
ジョブがジョブファイルに保存されたら、/JOB:<jobname>
オプションを使用して、読み取るジョブファイルを指定できます。 Robocopyは、ジョブファイル内のすべてのパラメータを読み取ります。 その後、コマンドラインでオプションを直接指定した場合と同じように実行されます。
> robocopy /JOB:myjob
/QUIT
を使用してジョブを実行せずにジョブファイルを作成する/QUIT
オプションの目的は明らかではありません。 表面的には、/QUIT
が実行を強制的に終了させると思うかもしれません。 代わりに、/QUIT
は、ジョブが最初に実行されないようにするオプションのように機能します。
公式には、/QUIT
オプションは”robocopyにコマンドラインの処理を強制的に終了させます”。 ただし、ジョブを実行せずにジョブファイルを作成すると説明する方がよいでしょう。
/SAVE
オプションを使用すると、ジョブも自動的に実行されます。 最初にジョブを実行せずにジョブファイルを作成する方法はありません。 テキストエディタでRCJジョブファイルを作成するか、最後に/QUIT
を追加してrobocopyを使用することができます。
> robocopy C:\src C:\dst /SAVE:myjob /QUIT
ジョブファイルの編集
ジョブファイルは単なるテキストファイルなので、お気に入りのテキストエディタで編集するか、robocopyにそれをさせるこ
ジョブファイルは、/JOB
、/SAVE
、および/QUIT
の組み合わせを使用して編集できます。
たとえば、backupfilesというジョブファイルに保存されているrobocopyジョブからすべてのEXEファイルを除外したいとします。rcj. あなたはすでにジョブファイルを作成しており、全体を上書きしたくありません。 以下のように新しいオプションを追加できます:
> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT
複数のジョブファイルの使用
ジョブファイルの使用を組み合わせることもできます。 同じ実行で複数のジョブファイルを指定すると、その実行で使用されるすべてのオプションが結合されます。
たとえば、backupfilesのコピージョブから除外するファイルのリストが大きい場合があります。 テキストエディタを開き、以下を追加して除外を作成します。ファイル:example.rcj
/XF a.exe b.txt c.cer
次のようにして、これらのファイルをbackupfilesジョブから除外できます:
> robocopy /JOB:backupfiles /JOB:exclude
元のbackupfilesジョブファイルはすでにすべてのEXEファイルを除外していたため、上記の実行の構文は/XF *.exe a.exe b.txt c.cer
になります。 Robocopyはすべてのオプションを1つにまとめました。
Robocopyテンプレートと/NOSDと/NODDオプションを使用する
多くのジョブファイルを使用している場合は、パラメータを受け入れるようにジョブファイルを構築 Robocopyを使用すると、実行時にコマンドラインからジョブに値を渡すことができます。 パラメータはrobocopyの用語ではありませんが、このシナリオではうまく収まります。
/NOSD
および/NODD
オプションを使用してソースディレクトリまたは宛先ディレクトリを明示的に指定しないか、ソースディレクトリと宛先ディレクトリをまったく含めないことで、パラメータを受け入れるようにrobocopyジョブを構築できます。
簡単な例として、以下の構文を使用して、ソースまたは宛先のないジョブファイルを作成します。 このジョブの目的は、すべてのTXTファイルとEXEファイルをソースから宛先ディレクトリにコピーすることです。
> robocopy *.txt *.exe /SAVE:backupfiles /QUIT
それ自体では、ソースディレクトリまたは宛先ディレクトリが指定されていないため、このジョブは動作しません。
ソースディレクトリと宛先ディレクトリのないジョブを作成すると、/NOSD
および/NODD
オプションを使用してジョブファイルが自動的に作成されます。
/NOSD /NODD/IF *.txt *.exe/DCOPY:DA/COPY:DAT/R:1000000/W:30
/NOSD
オプションは、robocopyにソースディレクトリを含めなかったことを示し、/NODD
は宛先ディレクトリを含めなかったことを示します。 このジョブファイルは、他のジョブの”テンプレート”です。
しかし、このジョブファイルに”パラメータ”を渡して、ソースディレクトリと宛先ディレクトリを提供することができます。
作成したばかりのジョブファイルを使用してファイルをコピーするにはC:\src Cへ:\dstを使用すると、これらのディレクトリをコマンドラインで直接渡すことができ、それがジョブに渡されます。
> robocopy /JOB:backupfiles C:\src C:\dst
非同期コピー(Robocopy/MT)
デフォルトでは、robocopyは一度に一つのファイルのみを処理します。 ただし、/MT
オプションを使用すると、robocopyに一度よりも多くのファイルをコピーさせることができます。
/MT
オプションを使用すると、robocopyがファイルのコピーに使用するスレッドの数を指定できます。 最大値は128です。
あなたは/MT
のように使うことができます:
> robocopy C:\src C:\dst /MT:32
私はベースラインとしてこの場合には32を選択しました。 私はあなたのコンピュータとネットワークが物事を処理し、それに応じてスレッドを調整する方法を確認するために32から始めることをお勧めします。
/MT
を使用すると、/IPG
や/EFSRAW
を使用できなくなることに注意してください。 パフォーマンスを向上させるには、ログをコンソールに出力しないでください。 代わりに、/LOG
を使用します。
スケジュールRobocopy
Robocopyには、実行時にスケジュールする方法がいくつかあります。
/RHの使用
/RH
オプションを使用すると、robocopyを特定の時間にのみ実行するように指示できます。 あなたはメンテナンスウィンドウや誰もが一日のために家に行っている時間を持っている場合、これは素晴ら
開始時刻と終了時刻は、HHMM-HHMMの形式で指定できます。 たとえば、robocopyを呼び出して、システムクロックで定義されている午後5時から午前9時までの時間の間にのみ実行できるようにするには、次のように実:
> robocopy C:\src C:\dst /RH:1700-0900
これらの時間外にrobocopyを呼び出すと、現在の時刻が表示され、開始時刻が実行されるのを待つことがわかります。
両方の時間が24時間形式であり、正確に4桁の長さであることを確認する必要があります。 ウィンドウは2分以上にする必要があります。
デフォルトでは、/RH
を使用すると、実行全体の前に開始時刻がチェックされます。 ただし、たくさんのファイルがあり、プロセスがそれよりも長くなる可能性があると思われる場合は、/PF
オプションを使用できます。 /PF
は、robocopyがすべてのファイルの前にウィンドウをチェックするように強制します。
タスクスケジューラ
を使用すると、出力ログ
Robocopyは常に出力ログを返します。 そのログがコンソールのstdout経由で表示されるか、ログファイルにリダイレクトされるかはあなた次第です。
robocopy出力を表示するときには、多くのオプションがあります。
説明 | デフォルトの動作 | 同等のスイッチ | 注意事項 | |
/NP | 進展なし。 進行状況情報の表示を抑制します。 これは、出力がファイルにリダイレクトされるときに便利です。 | |||
/unicode | ステータス出力をunicodeテキストとして表示します | |||
/ログ:ファイル | 状態をログファイルに出力して上書き | |||
/UNILOG:ファイル | ステータスをunicodeログファイルに出力して上書き | |||
/ログ+:ファイル | ステータスをログファイルに出力し、既存のログファイルに追加します | |||
/UNILOG+:file | ステータスをunicodeログファイルに出力し、既存のログファイルに追加します | |||
/TS | は、処理されたすべてのファイルのファイルタイムスタンプを表示します。 | |||
/FP | は、出力内の単純なファイル名を完全なファイルパス名に置き換えます。 | |||
/NS | はファイルサイズを表示しません。 | |||
/NC | は、ファイルクラス”Text Tags”の出力を非表示にします(詳細はこちらを参照してください: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | はファイル名を非表示にします。 障害はまだ記録されています。 すべてのファイル/Lが省略された場合に削除されたファイル、または削除されるファイルは常にログに記録されます | |||
/国立国会図書館 | は、ディレクトリ一覧の出力を非表示にします。 完全なファイルパス名は、問題のあるファイルをより簡単に追跡するために出力されます。 | |||
/TEE | コンソールウィンドウへの出力、およびログファイル | |||
/njh | ジョブヘッダーがありません | |||
/njs | ジョブの概要がありません | |||
/バイト数 | サイズをバイト単位で印刷 | |||
/X | 選択された&コピーされたファイルだけでなく、すべてのファイルを報告します | |||
/V | スキップされたファイルを示す詳細な出力ログを生成します | |||
/ETA | コピーされたファイルの到着予定時刻を表示します。 各ファイルコピーの開始時刻と、以前のコピーの観察されたスループットに基づいた完了の推定時刻を参照してください。 時刻は、ファイル名の後にHH:MM->HH:MM(start->finish)の形式で表示されます。 | |||
/DEBUG | デバッグボリューム情報を表示する |
/NJSと/NJH
でログ要素を制限するデフォルトでは、robocopyは出力に2つの要素、ジョブヘッダーとジョブサマリーを返します。
ジョブヘッダーは、上部にある単純なROBOCOPYヘッダーです。
ジョブの概要には、すべてのファイル/フォルダの概要ステータス、転送されたデータの量、および実行が終了した時間が表示されます。
これらの各要素を非表示にするには、/NJH
オプションを使用してジョブヘッダーを非表示にし、/NJS
オプションを使用してジョブの概要を非表示にします。 これらのオプションのいずれか、または両方を一緒に含めることができます。
出力ログをファイルにリダイレクトする
出力ログを保存する必要がある場合は、テキストファイルにリダイレクトしたり、コンソールに表示したりすることができます。 これは、>
、>>
、PowerShell、または/LOG
オプションなどの従来の出力リダイレクターを使用して行うことができます。
既存のログファイルを上書きする/LOG
オプションを使用して出力ログをファイルにリダイレクトするには、以下のような構文/LOG:<filepath>
を使用します。 コンソールで受信する唯一の出力は、ログファイルへのパスです。
> robocopy C:\src C:\dst /LOG:c:\file.log Log File : c:\file.log
既存のログファイルの内容を保持し、結果をファイルに追加したい場合は、以下に示すように+
演算子を使用できます。
> robocopy C:\src C:\dst /LOG+:c:\file.log Log File : c:\file.log
出力ログをファイルにリダイレクトしてコンソールに表示する
出力ログをファイルに保存し、コンソールにも表示したい場合は、/TEE
オプションを使 このオプションを指定すると、robocopyは出力をログファイルに書き込みますが、出力をコンソールに返すデフォルトの動作は維持されます。
robocopy C:\src C:\dst /LOG+:c:\file.log /TEE
終了コード
他のすべてのコマンドラインユーティリティと同様に、robocopyは実行結果に応じて終了コードを返します。 私たちは皆、robocopyが0
で常に正常に終了することを願っていますが、それは常に起こるとは限りません。
以下に、robocopyが返すすべての終了コードとその説明が表示されます。 終了コードが7より大きい場合は、実行中に少なくとも1つの失敗が発生したことを示します。
終了コード | |
0 | アクションは実行されません。 送信元と宛先が同期されます。 |
1 | 少なくとも1つのファイルが正常にコピーされました。 |
2 | 余分なファイルまたはディレクトリが検出されました。 ログを調べます。 |
3 | 終了コード2と1を組み合わせました。 |
4 | 一致しないファイルまたはディレクトリが見つかりました。 ログを調べます。 |
5 | 終了コード4と1を組み合わせました。 |
6 | 終了コード4と2を組み合わせました。 |
7 | 終了コード4、1、2を組み合わせました。 |
8 | 少なくとも1つのファイルまたはディレクトリをコピーできませんでした。 再試行の制限が超過しました。 ログを調べます。 |
16 | コピーは壊滅的に失敗しました。 |
サードパーティユーティリティでrobocopyを実行している場合、そのユーティリティはゼロ以外の終了コードが失敗であると考えるかもしれないことに注意してく これを防ぐには、終了コードを1を返す場合は0に変更します。
Robocopy”extra”ファイルの終了コードは、”extra”ファイルがコピー先フォルダにあるが、コピー元フォルダにはないことを意味する一般的な戻りコードです。 このコードでは、宛先からの削除を防止する追加機能が除外されます。
バッチファイルで終了コードを変更する
バッチファイルでrobocopyを実行している場合は、%ERRORLEVEL%
変数の値を見つけることができます。 1を返す場合は、exit
キーワードを使用して0でスクリプトを終了します。
> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0
PowerShellスクリプトで終了コードを変更する
PowerShellスクリプトでrobocopyを実行している場合は、Start-Process
を使用してrobocopyを呼び出して、作成されたプロセスを返し、Wait
を待機させてrobocopyが終了するのを待つことができます。 その後、ExitCode
プロパティの値が1であるかどうかを確認できます。 終了コードが1の場合は、$host.SetShouldExit()
を使用してPowerShellスクリプトを0で終了します。
$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCodeif ($exitCode -eq 1) { $host.SetShouldExit(0)}
一般的なエラー
何千ものファイルを扱っている場合は、いくつかの問題を抱えて実行する必要があります。 ここでは、私が遭遇した一般的なエラーの内訳です
Error Invalid Parameter
error invalid parameterというエラーが表示されたとき、これは通常、何らかの形でrobocopy out of sequenceにオプションを渡そうとしたことを意味します。 Robocopy invalid parameter3エラーが最も一般的なようです。
このエラーが表示される一般的な理由は、ソースディレクトリまたは宛先ディレクトリをスペースで指定し、引用符で囲むことを忘れた場合です。
Robocopyの例
あなたはrobocopyの独自の文字列を構築することができますか、他の人が学んだことを取り、それらを使用することができます! このセクションでは、robocopyを使用してさまざまなことを達成する方法のユースケースについて説明します。
ネットワークフォルダのディレクトリサイズを調べる
: ノーザントルーパー(Reddit)
> robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64
フォルダの内容をすばやく削除する(サブフォルダの権限を無視する)
投稿者:pizzasteveo(Reddit)
> robocopy c:\dummy c:\foldertodelete /MIR
大規模なファイル移行の実行
投稿者:@MySnozzberries(Twitter)
このスニペットの目的は、すべてのファイルの所有権を管理者に戻すことです。 次に、継承も設定しているにもかかわらず、すべてのオブジェクトを再帰的に完全に制御するために、Administratorsグループに明示的なACEを追加します。
最後に、ログを使用してdaclを使用してコピー先に完全なロボコピーコピーを行います。 ログは、追加の権限の問題または単にファイルロックのために確認することができ、別のデルタ同期は、後で実行することができます。
> takeown /F .\test /R /A /D Y> icacls .\test /grant "Administrators":(OI)(CI)F /T> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
再帰的にすべてのファイルとディレクトリの所有者としてAdministratorsグループを強制します。 これを回避する方法があるかもしれませんが、これは最も重い手のアプローチであり、通常は最速です。
> takeown /F .\test /R /A /D Y
私たちが所有者になれば、すべてのオブジェクトのDACLに新しいACEを強制することができます。 これにより、管理者は継承を有効にしてパスを再帰的にフルコントロールできます。
これを継承でルートに設定すると環境がカバーされますが、共有に完全な制御を持つ作成者の所有者がいる場合(悲しいことに、ファイルユーザープロフ だから、重い手は、通常、最速の修正です。
> icacls .\test /grant "Administrators":(OI)(CI)F /T
大部分のファイルのDaclを変更したら、ファイル共有の移行などに一般的な新しい場所にファイルをコピーしようとします。 このために、項目を再帰的にコピーし、/SEC
スイッチを使用してData/Attributes/Timestamps/DACLsもコピーします。
次に、フルパスとすべてのオブジェクト(/V
verbose switch)の操作をログに記録するため、パスの長さやファイルロックに関連する一般的なエラーの<5%を修正し、よ
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
これは、ユーザーエクスペリエンスへの影響を最小限に抑えてファイル共有移行を管理するための簡単なフレームワークです。 また、データに対して保持する制御も改善されます。 所有権が子フォルダレベルで適切に管理されている強力なデータガバナンスの実践を顧客が持っている場合、これはより複雑な議論になりますが、ほと
Robocopy Alternatives
Robocopyは素晴らしいツールですが、それに似た他の多くのツールが興味を持っているかもしれません。
- xxcopy–オプションのトンを持つ同様のコマンドラインユーティリティ。
- コピー-アイテムPowerShellコマンドレット–ほぼ機能していませんが、はるかに簡単です。
- TreeSize–フォルダ情報を検索するためのGUIおよびスクリプト可能なユーティリティ。
概要
Robocopyは、大きなファイルセットをコピーするための優れたツールです。 データの移行、フォルダの同期、またはファイルを正確にコピーするための簡単な方法が必要な場合でも、robocopyは最適な選択肢です。