URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。
あるフォルダを別なフォルダにミラーリングコピーする方法としては,以前はxcopyを使うことが多かったが,この方法だと転送元から削除されてい るのに転送先に残っている不要なファイルの削除はできません。 僕自身はそういうゴミを削除するコマンドを別に作って運用していましたが,Windows Resource Tool KitにRobocopyというコマンドがあるのを見つけました(Winodws VISTAには最初からRobocopyが入っています)。これは,そのような不要ファイルを削除することもできるすぐれもので,Linuxのrsync のように便利なツールです。このRobocopyについて色々と調べてみました。
Resurce Kitをインストールするとrobocopy.exeと同じフォルダにrobocopy.docというドキュメントもインストールされます。ここには Robocopyを使う上での有益な情報が詰まっているのですが,いかんせん英文です。なんとかがんばってこれを日本語訳してみました。それがRobocopy.docの日本語版 です。ここでは,その作業の中で得られたものから特に便利そうなものを抜粋して掲載します。Robocopyに関する日本語サイトで最も詳しいページを目指します。
usageは次の通りです。
ROBOCOPY source destination [file [file]...] [options]
引数 |
意味 |
コメント |
|
||
source |
転送元ディレクトリ |
drive:\path や \\server\share\pathYが使用できます。 |
destination |
転送先ディレクトリ |
drive:\path や \\server\share\pathYが使用できます。 |
file |
処理対象となるファイル名 |
ワイルドカード文字 (? and *)が使えます。指定されたなかった場合はデフォルトで全てのファイル (*.*)となります。 |
options |
コマンドラインオプション |
利用できるオプションは、後述します。 |
転送元から転送先にファイルをコピーします。fileを指定することで転送元のファイルから特定のものだけをコピーするように指定することもできます。
robocopy C:\userdata \\server\userdata /MIR
上記の例では,C:\userdataの内容を \\serverというサーバーにあるuserdataフォルダにミラーリングコピーします。/MIRはミラーリングするときに使うオプションで,サブ フォルダもコピーすることと,転送元にない不要ファイルを転送先から削除することを指定します。
オプションスイッチの意味は次の通り。これは
robocopy /?
で表示されるヘルプを日本語化したもの。(VISTAのrobocopyはこのヘルプも日本語化されていますが,それとは若干表現が違うと思います。)
オプションスイッチの実際の利用例はこちらをご覧ください。
/S :: 空でないサブフォルダをコピーする /E :: 空のものも含めてサブフォルダをコピーする /LEV:n :: ソースフォルダツリーの中の上位nレベルのみをコピーする /Z :: 再開可能(restartable)モードでファイルをコピーする /B :: バックアップモードでファイルをコピーする /ZB :: 可能なら再開可能モードで不可ならバックアップモードを使う /COPY:copyflag[s] :: copyflagで指定されたファイル情報をコピーする(デフォルトは /COPY:DAT) D : データ A : 属性 T : タイムスタンプ S : セキュリティ情報(NTFSのACL) O=所有者情報 U=ファイル監査情報 /SEC :: セキュリティもコピーする (/COPY:DATSと同じ) /COPYALL :: すべてのファイル情報をコピーする(/COPY:DATSOUと同じ) /NOCOPY :: ファイル情報をコピーしない (/PURGEと一緒に使える) /PURGE :: コピー元にないファイル・フォルダを削除する /MIR :: ミラーリングコピーする (/Eと/PURGEを指定したのと同じ) /MOV :: ファイルを移動する (コピー後にコピー元から削除する) /MOVE :: ファイルとフォルダを移動する(コピー後にコピー元から削除する) /A+:[RASHNT] :: コピーされたファイルに与えられた属性を加える /A-:[RASHNT] :: コピーされたファイルから与えられた属性を削除する R : Read only S : System N : Not content indexed A : Archive H : Hidden T : Temporary /CREATE :: フォルダツリーと0バイトのファイルを作るのみ (データはコピーされない) /FAT :: コピー先ファイルを8.3形式のファイル名で作成する /FFT :: FATタイムスタンプ(精度2秒)であると見なす /256 :: 非常に長いパス(256文字以上)のサポートをオフにする /MON:n :: コピー元を監視,n回以上の変更があったら再実行する /MOT:m :: コピー元を監視,m分後に変更があったら再実行する /RH:hhmm-hhmm :: コピー開始できる時間帯を指定します /PF :: 処理単位ではなくファイル単位で実行時間帯のチェックをする /IPG:n :: 遅い回線の帯域を確保するためパケット間にnミリ秒のギャップを挿入する
/A :: Archiveビットがセットされているファイルのみをコピーする /M :: Archiveビットがセットされているファイルのみをコピーし ビットをリセットします。 /IA:[RASHCNETO] :: 指定された属性がセットされているファイルのみを含む /XA:[RASHCNETO] :: 指定された属性がセットされているファイルを除外する /XF file [file]... :: 指定されたファイル名(パス,ワイルドカード)と一致するファイルを除外する /XD dirs [dirs]... :: 指定されたフォルダ名(パス)と一致するフォルダを除外する 次のファイルの種類についてはファイルクラスを参照。 /XC :: Changedファイルを除外する /XN :: Newerファイルを除外する /XO :: Olderファイルを除外する /XX :: Extraファイルとフォルダを除外する /XL :: Lonelyファイルとフォルダを除外する /IS :: Sameファイルを含む /IT :: Tweakedファイルを含む /MAX:n :: nバイトより大きいファイルを除外する /MIN:n :: nバイトより小さいファイルを除外する /MAXAGE:n :: 指定日よりも古いファイルを除外する /MINAGE:n :: 指定日よりも新しいファイルを除外する /MAXLAD:n :: 指定日以降に使われていないファイルを除外する /MINLAD:n :: 指定日以降に使われているファイルを除外する nの指定は,nが1900以下の時はnは現在からさかのぼる日数。nがYYYYMMDD形式ならその日付 /XJ :: 境界値を含まない (デフォルトでは境界値を含む)
/R:n :: コピーに失敗したときにリトライする回数。デフォルトは1000000 /W:n :: リトライの間にウェイとする秒数。デフォルトは30秒 /REG :: /R:n と /W:n オプションをレジストリに初期値として保存する /TBD :: wait for sharenames To Be Defined (retry error 67).
/L :: ファイルのリストを表示するのみ。ファイルのコピーなどはしない /X :: report all eXtra files, not just those selected. /V :: produce Verbose output, showing skipped files. /TS :: ソースファイルのタイムスタンプを出力に含む /FP :: ファイルのフルパス名を出力に含む /NS :: ファイルサイズをログに出力しない /NC :: ファイルクラス(New File, Newer, Olderなど)をログに出力しない /NFL :: ファイル名をログに出力しない /NDL :: フォルダ名をログに出力しない /NP :: 進捗を表示しない(%コピーという表示をしない) ログファイルに記録するときはこれを指定した方がよい /ETA :: コピーに要する推定時間を表示する /LOG:file :: ログファイルに出力する(存在するファイルには上書き) /LOG+:file :: ログファイルに出力する(存在するファイルには追加) /TEE :: ログファイルと同じようにコンソールにも出力する /NJH :: ジョブヘッダを出力しない /NJS :: ジョブサマリを出力しない
/JOB:jobname :: jobnameで指定されたファイルからパラメータを得る /SAVE:jobname :: jobnameで指定されたファイルにパラメータを保存する /QUIT :: コマンドラインの解析をした後に終了する(パラメータを表示する) /JOBと一緒に使うとジョブファイルの内容を表示する /NOSD :: コピー元が指定されないと断言します。 コピー元が実行時で提供されるテンプレートジョブに役立つ。 /NODD :: コピー先が指定されないと断言します。 コピー先が実行時で提供されるテンプレートジョブに役立つ。 /IF :: 指定された名前のファイルをインクルードする。ジョブファイルでのみ使う
Robocopyでは,転送元と転送先のフォルダでのファイルの状態によって,対象ファイルを分類して処理します。次の表をご覧ください。
クラス | 説明 |
Lonely | 転送元には存在するが転送先に存在しないファイル |
Same | 転送元と転送先両方に存在し,タイムスタンプもサイズも属性も同じファイル |
Tweaked | 転送元と転送先両方に存在し,タイムスタンプもサイズも同じだが,属性だけが異なるファイル |
Changed | 転送元と転送先両方に存在し,タイムスタンプは同じだが,サイズ異なるファイル |
Newer | 転送元と転送先両方に存在するが,転送元のタイムスタンプの方が新しいファイル |
Older | 転送元と転送先両方に存在するが,転送元のタイムスタンプの方が古いファイル |
Extra | 転送元に存在しないのに転送先に存在するファイル |
Mismatched | 転送元のファイルと同名のディレクトリが転送先にある(あるいはその逆) |
デフォルトではChanged, Newer, Olderがコピーされます。ファイルクラス毎にコピーするかどうかを変更するのに/XC /XN /XO /XX /XL /IS /ITなどのオプションを使用します。Extraファイルを転送先フォルダから削除するには,/PURGEか/MIRオプションを指定します。
/MON:nと/MOT:mスイッチを使用して、転送元のディレクトリツリーの変化をモニタして,変化が起こるたびにファイルをコピーすることがで きます。/MON:nスイッチは,n回以上の変更があったらコピーを開始することを指定します。/MOT:mスイッチは前回のコピーからm分以上経過した らコピーを開始することを指定します。これらのスイッチのうちの1つだけ指定した場合は,もう一方には1の値を指定したことになります。これらが指定され ていたら,Robocopyは終了しないで常駐プログラムかサービスのように監視を続けます。こうしてRobocopyでモニタリングしていると,転送元 のファイルへの変更結果をほぼリアルタイムで転送先へも反映させることができます。
robocopy C:\userdata \\server\userdatta /MIR /MON:5 /MOT:5
このように指定するとC:\userdataに5回以上の変更が加えられて,前回のコピーから5分以上たっていたらコピー作業が始まります。
これらと一緒に/RHオプションが指定されると,実行可能な時間帯も設定できます。
robocopy C:\userdata \\server\userdatta /MIR /MON:5 /MOT:5 /PH:2200-0600
こんな風にするとコピーが開始する時間帯は夜の10時から朝の6時までになり,それ以外の時間帯はスリープしつづけます。このRHコマンドは作業の開始時間を指定するためにも使えます。
robocopy C:\userdata \\server\userdatta /MIR /PH:1900-2000
この場合だと19時まで待ってコピーを始め,コピーが終了したらrobocopyは終了します。
Robocopyの機能は豊富ですしコマンドラインオプションもたくさんあります。フルに機能を使おうとするとコマンドラインが長~くなってしまいます。そういうときにはジョブファイルというのが使えるようになっています。一度次のコマンドを実行してみてください。
robocopy /SAVE:test /QUIT
するとカレントディレクトリにtest.RCJというファイルができると思います。これがジョブファイルです。ジョブファイルはコマンドラインのオ プションを記録したものです。各行にオプションを指定します。二つのコロン以降はコメントになります。複雑なコマンドラインになるような処理はジョブファ イルを記録しておくと便利です。利用するときには次のようにします。
robocopy /JOB:test
さらに便利なのはジョブファイルは複数使用できるという点です。ただし転送元と転送先は1回しか指定できません。転送元や転送先を指定しないジョブファイルには,/NOSD /NODDオプションを記述しておきます。
添付 | サイズ |
---|---|
Robocopy.docの日本語版 | 367.5 KB |
Robocopy のオプションはめちゃくちゃたくさんあります。ここでは,実際に場面でのその組み合わせ例を示します。
robocopy C:\userdata \\server\userdata /MIR
ソースパスの内容ととデスティネーションパスを全く同じにしたい場合に使います。/MIR オプションは,/E(空のものも含めてサブフォルダをコピーする) と /PURGE(コピー元にないファイル・フォルダを削除する) を両方指定したのと等価です。
コピー先のファイル削除をしない場合は
robocopy C:\userdata \\server\userdata /E
のように /E のみを指定します。
エクスプローラなどで,フォルダごとコピーしようとすると,長い間待たされたあげくエラーが発生して途中で止まってしまいガッカリという経験はありませんか。「とりあえず,エラーが起きないファイルだけでも全部コピーしてくれればいいのに」
robocopy C:\userdata \\server\userdata /R:0 /E
/R:0で,エラー時のリトライ回数を0にしています。/Eオプションでソースフォルダの全てをコピーします。これでソースフォルダのファイルをエラーが発生しても中断することなくコピーできます。
robocopy C:\userdata \\server\userdata /R:0 /E /NFL /NP > COPY.LOG
さらに/NPや/NFLオプションをつけるて出力をファイルにリダイレクトすると,エラーが発生したログだけが残りますので,コピーできなかったファイルを特定できます。
デスティネーションフォルダにはあるがソースフォルダにないファイル。Robocopy のファイルクラスで言うとExtra。いわゆるゴミのファイルですが,そのファイルを削除するのみで,ファイルのコピーは行わないということもできます。
robocopy C:\userdata \\server\userdata /NOCOPY /PURGE
Robocopy のデフォルトの動作では,Changed, Newer, Older のクラスのファイルがコピーされます。ソースの方が古いファイルであっても,コピーされるのです。古いファイルはコピー対象から外したい場合は/XOオプションを使います。
robocopy C:\userdata \\server\userdata /MIR /XO
NAS製品の中では,タイムスタンプの精度がFATなみの2秒というものがあります。そのくせNTFSを名乗っている。そんなディスクとNTFSのディスクの間でミラーリングをした場合に,タイムスタンプの精度の違いにより,毎回コピーされてしまったり全然コピーされなかったりとうまく動かないことがあります。そんなことが起きないように,/FFT オプションを使います。
robocopy C:\userdata \\server\userdata /MIR /FFT
/FFTでは,タイムスタンプの精度が2秒であるとしてコピーをします。
コピーではなくフォルダ構造全体を移動したい場合は,/MOVE オプションを使います。
robocopy C:\userdata \\server\userdata /MOVE
よく似た感じの /MOV オプションもあります。こちらは,コピー元に(空っぽの)フォルダ構造が残ります。/MOVE ではフォルダも含めて元のパスにはなにもなくなります。