robocopyで長いパスやファイル名も確実にバックアップ
Windowsを利用しているとフォルダの同期やバックアップを取りたくなることがあります。
今までこういうシーンではXCOPYなどのコマンドで対応していたが、XCOPYには致命的な欠点がありました。それは255文字以上(OSのバージョンによって数バイト変わるようです)のフルパスのファイルのバックアップがとられないこと。
しかも、エラーも吐き出さないので意外と気がつきにくい。
たとえば下記のようなファイルのバックアップがされないのだ。
C:\(フォルダA 長さ150文字)¥(フォルダB 長さ100文字)\abcdefg.txt
そもそもバックアップができないになぜこんな長いパスが作れてしまうのかというとそれは、上記の例ではフォルダBを共有してネットワークドライブなどにした際に最初のフォルダAの長さがカウントされていないため。(これってOSとして非常に問題があると思うのですが、どうなんでしょうか)
そこで調べてみるとMSのリソースキットにrobocopyなるコマンドがあることがわかった。ダウンロードは下記から。
WindowsServer2003ResourceKitTools
このコマンドなら長さは関係なしにコピーが取れる。(確認はしていないがVistaにはrobocopyがはいっているようだ)これを使ったらXCOPYには戻れませんね。
使い方は簡単だ。コマンドプロンプトで下記のように打てば「c:¥source」フォルダの中身が「d:¥dist」にコピーされる。
c:\>robocopy c:\source d:\dist /MIR
コマンドプロンプトで動くのでバッチなどを作ってタスクが組みやすいのが利点です。
GUI環境で同じようなことがやりたい人には「SyncToy2.0」が同じくMSから無償提供されています。ただし、上記のような長いパスに対応しているかは調べていません。
RoboCopyをGUIで実現できるRichCopyがMSの下記サイトからダウンロードできます。
http://download.microsoft.com/download/f/d/0/fd05def7-68a1-4f71-8546-25c359cc0842/HoffmanUtilitySpotlight2009_04.exe
また、これについて書かれた記事は下記などにあります。
http://technet.microsoft.com/ja-jp/magazine/2009.04.utilityspotlight.aspx
http://jbar.jp/action.php?action=plugin&name=TrackBack&tb_id=918













