目次
- 「replace」コマンドの使い方
- コピー先にファイルがある場合のみコピーする
- コピー先にファイルがない場合のみコピーする
- コピー先のサブフォルダ内のファイルもコピー対象とする
- 更新されたファイルだけをコピーする
- さらに高度な「xcopy」コマンド
「replace」コマンドの使い方
「replace」は主にバックアップ用のコピーを行うときに用いられるコマンドです。使用方法は以下の通りです。
1 |
replace [オプション] [コピー元ファイル名] [コピー先フォルダ名] |
ここで注意したいのは、コピー元にはファイル名しか指定できず、反対にコピー先にはフォルダ名のみ指定できるという点です。
以下は、これを守らずにコマンドを実行したときのエラー例です。
一つ目のエラーは、コピー元にフォルダを指定したことによるエラー、二つ目はコピー先にファイル名を指定したことによるエラーです。
基本的には「copy」コマンドと同様の使い方になりますが、「replace」コマンドを使用する場合は、必ずといっていいほど何らかのオプションを付けます。そうでないと、「copy」コマンドの代わりに「replace」コマンドを使う意味がありません。
良く使われる主なオプションとしては、以下のものがあります。
オプション無し | コピー先にファイルがある場合のみコピーする |
/a | コピー先にファイルがない場合のみコピーする |
/s | フォルダ内のサブフォルダのファイルをコピー対象とする |
/u | 新しくなったファイルだけをコピーする |
次節からこれらについて詳しく説明します。
コピー先にファイルがある場合のみコピーする
「replace」コマンドではデフォルトの動作として、コピー先に同様のファイルがある場合のみコピーします。
例として、「folder」フォルダ内の「file1.txt」、「file2.txt」、「file3.txt」ファイルを「copyfolder」フォルダ内にコピーすることを考えます。ただし、「copyfolder」フォルダには「file1.txt」ファイルが既に存在しているとします(以下にフォルダ構造を示す)。「file2.txt」ファイルおよび「file3.txt」ファイルは存在しません。
【コピー元】
folder
∟file1.txt
∟file2.txt
∟file3.txt
【コピー先】
copyfolder
∟file1.txt
「folder」フォルダ内全てのファイルを対象に「copyfolder」へのコピーを行うコマンド、
1 |
replace folder\*.txt copyfolder |
を実行すると(「\」は「\」に置き換えて下さい)、
のように、「file1.txt」ファイルのみがコピーされました。コピー先にファイルがない「file2.txt」と「file3.txt」はコピーされません。
逆に、コピー先にファイルがない場合のみコピーしたいときは、次節の「/a」オプションを使用します。
コピー先にファイルがない場合のみコピーする
コピー先に既にファイルがあり、それらは上書きしたくない場合に使用するオプションが「/a」です。このオプションを指定すると、コピー先に同名のファイルがないものについてだけコピーを実行することができます。
再び例として、「folder」フォルダ内の「file1.txt」、「file2.txt」、「file3.txt」ファイルを「copyfolder」内にコピーすることを考えます。ただし、「copyfolder」フォルダには「file1.txt」ファイルが既に存在しています。前節の例と同じです。
【コピー元】
folder
∟file1.txt
∟file2.txt
∟file3.txt
【コピー先】
copyfolder
∟file1.txt
この状態で、「/a」オプションを指定した「replace」コマンドを実行します。
1 |
replace /a folder\*.txt copyfolder |
すると、
と前節のオプション無しの場合とは逆に、「file2.txt」ファイルと「file3.txt」ファイルだけがコピーされました。
コピー先のサブフォルダ内のファイルもコピー対象とする
コピー先にあるサブフォルダ内のファイルもコピー対象としたい場合には「/s」オプションを用います。ただし、このオプションを使うのは少し複雑ですので慣れないと混乱するかもしれません。
以下では、実際にこのオプションの動作を見ていきましょう。例として「folder」フォルダに、
folder
∟file1.txt
∟file2.txt
∟file3.txt
∟subfile1.txt
∟subfile2.txt
∟subfile3.txt
計6個のファイルが入っているとします。これらを、「copyfolder」フォルダにコピーするとします。このとき、コピー先の「copyfolder」フォルダの構成は、
copyfolder
∟file1.txt
∟file2.txt
∟file3.txt
∟subfolder(フォルダ)
∟subfile1.txt
∟subfile2.txt
∟subfile3.txt
のように「copyfolder」の中にサブフォルダとして「subfolder」があり、それぞれのフォルダにはファイルが存在している状況を考えます。ファイルはすべてコピー元のファイル名と一致していますが、現在のフォルダとサブフォルダにそれぞれ3つずつ分かれている点が異なります。
オプション無しのコマンドを使用して、
1 |
replace folder\* copyfolder |
と入力すると「copyfolder」フォルダ直下の「file1.txt」、「file2.txt」、「file3.txt」ファイルがコピーされましたが、サブフォルダ「subfolder」内の「subfile1.txt」、「subfile2.txt」、「subfile3.txt」ファイルはコピーされていません。
次に、「/s」オプションを付けて、
1 |
replace /s folder\* copyfolder |
とすると、以下のように「copyfolder」のサブフォルダである「subfolder」内のファイルまでコピーされていることが分かります。
注意すべきことは、コピー元のフォルダ構成とコピー先のフォルダ構成は必ずしも一致していないという点です。
コピー元では「folder」フォルダの下にすべてのファイルが存在しました。しかし、コピー先で更新されたファイルは「folder」フォルダ内の「file1~3.txt」ファイルと「folder\subfolder」フォルダ内の「subfile1~3.txt」ファイルです。
「/s」を使用するとコピー元にあるファイルをコピー先のサブフォルダまで含めた中から一致する名前を見つけ出して置き換えるのです。
更新されたファイルだけをコピーする
バックアップを取るとき、毎回全てのファイルをコピーしていては膨大な時間がかかってしまいます。そのようなときは「/u」オプションを指定して、前回から更新されたファイルだけをコピー対象とすればよいでしょう。
1 |
replace /u [コピー元ファイル名] [コピー先ファイル名] |
コピー対象を更新されたファイルに限定するオプション「/u」はバックアップ時に必須の機能です。
さらに高度な「xcopy」コマンド
「replace」コマンドよりさらに高度な操作ができるようになったコピー操作に「xcopy」コマンドがあります。「xcopy」コマンドはコピーコマンドの中で最上位な機能を備えており、「replace」コマンドの機能は全て「xcopy」コマンドにも含まれています。
通常、「xcopy」コマンドの方が扱いやすいこともあり、高度なコピーを行いたい場合には「replace」コマンドよりも「xcopy」コマンドの方を使う場合が多いです。「xcopy」コマンドについては「xcopy(より高度なコピー) -コマンド別解説-」をご参照下さい。