【バッチ、Windows】フォルダをコピーしまくりたいときに便利なコマンド「Robocopy」

Code

はじめに

最近、フォルダをコピーする機会が多く、そのときに「Robocopy」コマンドを打つことが多くなったので、ここらで集中的に記事としてまとめたいと思います。

リサちゃん
リサちゃん

ロボコピーってなんだかカワイイ呼び名だね。ロボコピーッ!

今日も張切るロボーッ!

デウス・エクス・マキナァ!!

135ml
135ml

(・・・なんか今日やけにテンション高いな・・・?)

ペンギン
ペンギン

(・・・昨日午前2時に酔っ払いながら裸足で帰ってきたけど、それと関係あるのかな?)

基本的な構文だけだとフォルダをコピーできないのだ。

リサちゃん
リサちゃん

ああっ?コピーするコマンドなんだから、robocopy a b 的な感じで打てばいいんだろう?

135ml
135ml

そう慌てるでない。まあ、いっぺんそれで打ってみ。あ、aの中にサブフォルダとかも入れてみてね。空のほうが良いな。

「a」フォルダに画像のとおりにファイルとフォルダを入れて以下のコマンドを打ってみる。

robocopy a b
リサちゃん
リサちゃん

いけえ。ラ◯ュタの雷をぉ↑↑

135ml
135ml

・・・

すると、「foruda」フォルダがコピーされていないことが確認できる。

リサちゃん
リサちゃん

おい、フォルダが移ってねえじゃねえか! パソコン壊れたか! AmazonでPCのタイムセールやってねえかなあ!?

135ml
135ml

待て待て。PCをわざわざ買い直すんじゃあない。

これはrobocopyの仕様なのだ。サブフォルダもコピーするためにはオプション値を入れなければならんのだ。これをいっつも忘れるんだよな・・・

僕がいつも使ってるrobocopy文

僕がいつも使うときは、大抵まるっとコピーしたいので、以下の文を使います。

robocopy a b /s /e

すると・・・

リサちゃん
リサちゃん

おお! フォルダもコピーされてるじゃねえか!

何が起きたんだよ!?

135ml
135ml

う~ん、絡みづらい・・・。え~と、今入れたオプション値は以下の効果があるのよ。

  • S :サブディレクトリをコピーして、空のディレクトリはコピーしない。
  • E:空のサブディレクトリもコピーする。
リサちゃん
リサちゃん

なるほどなあ。SはSub directoryで、EがEmpty directoryですな基本的にはこの書き方で大丈夫そうだなあ。

コピー元から削除したい場合の書き方

135ml
135ml

このrobocopyなんだが、コピーだけじゃなく移動もできるんだわ。

さっき作った「b」フォルダを「c」としてコピーするね。

リサちゃん
リサちゃん

くそっ!!今日てんびん座最下位かよ!!

この文を実行すると、以下の画像のようになる。

robocopy b c /s /e /mov

また、この文を実行すると、 以下の画像のようになる。

robocopy b c /s /e /move
135ml
135ml

「/mov」だとコピー元フォルダの中のファイルが無くなって、 「/move」だとコピー元フォルダごと無くなるんだよね。

リサちゃん
リサちゃん

なるほどなあ。 「/mov」は家の中のものを盗る泥棒猫で、「/move」は家ごと盗る結婚詐欺師って感じだね。

135ml
135ml

おお・・・そうだといいな・・・

フォルダ構造だけコピーしたい場合の書き方

135ml
135ml

ファイルは要らねえ!フォルダだけくれ!っていうケースを紹介します。

「a」フォルダに以下のファイルとフォルダを追加します。

以下の2つのコマンドを比べてみると、/nocopyを入れたらファイルがコピーされずにフォルダ構造だけコピーされていることが確認できる。

robocopy a b /s /e
robocopy a b /s /e /nocopy

大量のファイルとフォルダをコピーする場合に役立ちそうなオプション

135ml
135ml

HDDとかSSDに自分が個人レベルで持っているデータをバックアップとかで保存したいときに役立ちそうなオプションを紹介するよ。以下の4つ。

  • /j:バッファに蓄積せずにコピー。メモリ使用量を削減。
  • /purge:コピー先フォルダが既にある場合に、コピー元フォルダに存在しないコピー先フォルダ内のファイル・フォルダを削除する。
  • /minage:yyyymmdd:コピー元フォルダ内の更新日時が指定日時より新しいファイルを除外する。
  • /XNで新しいのを除外。/XOで古いのを除外。
リサちゃん
リサちゃん

へえ・・・ファルシのルシがコクーンでパージするんだね。

135ml
135ml

そうだね、パルスのファルシのルシがパージでコクーンで・・・って、FF知らない人がぽかーんだね。やめようね。

まず、/jを使って、「b」フォルダを作るよ。

/j:バッファに蓄積せずにコピー。メモリ使用量を削減。

robocopy a b /s /e /j

/purge:コピー元フォルダにないものはコピー先フォルダで削除。

135ml
135ml

そして、「a」フォルダからtest.txtを消すね。その状態で、/purgeすると、「b」フォルダからtest.txtが無くなるんだわ。

robocopy a b /s /e /j /purge
リサちゃん
リサちゃん

本当だ! 「test.txt」がない! 私の今月の食費もない!

135ml
135ml

(何の話をしているんだ・・・?)

/XN:コピー元が新しいとコピーされなくする。

135ml
135ml

この状態で、次のコマンドを打つと、 古いのだけコピーされる。

robocopy a b /s /e /j /purge /XN

/XO:コピー元が古いとコピーされなくする 。

135ml
135ml

このコマンドを打つと、新しいのだけコピーする増分バックアップができる。

robocopy a b /s /e /j /purge /XO
リサちゃん
リサちゃん

あ~、古いのより新しい方が当たりやすいもんね~。

/minage:yyyymmdd:コピー元フォルダ内の更新日時が指定日時より新しいファイルを除外する。

135ml
135ml

そして、前にバックアップした日付をメモっていれば、/minageでコピー先に古いファイルのままにしたままで、バックアップもできる。

この状態で以下のコマンドを実行すると・・・

robocopy a b /s /e /j /purge /minage:20111026
リサちゃん
リサちゃん

無い! 確かに、あんなにシフトを入れて手に入れたバイト代が無いよう・・・

135ml
135ml

・・・?

おしまい

リサちゃん
リサちゃん

今日はこんなもんか!また一つ、世界の真実を知ってしまったようだ・・・

135ml
135ml

そういや、今日はなんでテンションがいつもより2段階くらいレベル高いの?彼氏にでも振られたか?

リサちゃん
リサちゃん

いやー違うんだよ。昨日始めてパチンコに行ったら今月のバイトの給料全額すっちまって、隣の席のおっちゃんに色仕掛けで数万借りたんだけど、それもすっちまってこっそり帰ろうとしたら、おっちゃんとその仲間らしき人たちに囲まれたんだけど、パチンコ行く途中のバスの中で鈴木福似の子供から貰った爆竹を叩きつけてなんとか逃げ切って、その帰りに公園でしょぼくれて泣いてたら、ガタイのいいOLがブラックニッカをおごってくれて、色々とお互いに思いの丈を話したら、吹っ切れました!

今日からも思いっきり頑張ろうと思いました!

135ml
135ml

そんなバカなあ。

参考になったサイト

ペンギン
ペンギン

このサイトがすごくゴリゴリ網羅されていました。もっと知りたかったらオススメです。

Robocopyの基本動作とコマンドオプション解説

コメント

タイトルとURLをコピーしました