4. ファイル操作関係 

   4−1  コピー( COPY )
   4−2  削除( DEL )
   4−3  移動( MOVE )
   4−4  ファイル名・ディレクトリ名変更 ( RENAME )

<前章までの状態>
  D:ドライブに test ディレクトリがあります。
  D:\test ディレクトリの中に以下のものがあります。
    ファイル test.txt
 D:\test
   └ test.txt


4−1  コピー( COPY )

test.txt の複製を作ります。カレントディレクトリの中でおさまる処理であれば、 パス名 (この場合は D:\test のこと) なしのファイル名だけでOKです。 (もちろん、付けても構いません)
異なるディレクトリにあるファイルを処理する場合は、ファイル名の前のパス名も必ず指定します。

 COPY 複製元ファイル名 出力ファイル名
 DIR /B (ファイル名だけを一覧表示)

 D:\test>copy test.txt test2.txt
         1 個のファイルをコピーしました。

 D:\test>copy test.txt test3.txt
         1 個のファイルをコピーしました。

 D:\test>dir /b
 test.txt
 test2.txt             ← ファイルが増えました
 test3.txt

 D:\test>


testディレクトリの下に renshuディレクトリを作り、そこに test.txt の複製を作ります。
 MD ディレクトリ名
 COPY 複製元ファイル名 コピー先ディレクトリ名

 D:\test>md renshu
                         ← D:\test\renshu が作成されました
 D:\test>copy test.txt renshu
         1 個のファイルをコピーしました。

 D:\test>


コピー先に同名のファイルがすでに存在している場合は、上書きしていいかどうか 確認メッセージが出ます。すでに test.txt がある D:\test\renshu に、 もう一度 test.txt をコピーしようとしてみます。

 D:\test>copy test.txt renshu
 renshu\test.txt を上書きしますか? (Yes/No/All): n
         0 個のファイルをコピーしました。        
                                   実行をキャンセルしました
 D:\test>


renshuディレクトリに、testディレクトリのファイルをすべてコピーします。 ファイル名にワイルドカード を使うことによって、一度に複数のファイルを指定することが可能です。

 COPY * コピー先ディレクトリ名 ( * はすべてのファイルを意味する )

 D:\test>copy * renshu
 test.txt
 renshu\test.txt を上書きしますか? (Yes/No/All): y  ←Yesを選択
 test2.txt
 test3.txt
         3 個のファイルをコピーしました。

 D:\test>



4−2  削除( DEL )

D:\test ディレクトリにあるファイル test.txt をディスク上から削除します。 WindowsのGUIと違い、ファイルは "ごみ箱" へいくわけではありません。 ファイルは即座になくなってしまうので、誤って別のファイルを削除してしまわぬよう 慎重に試して下さい。

 DEL 削除ファイル名   または   ERASE 削除ファイル名

 D:\test>del test.txt
                           ← エラーなく削除されました
 D:\test>


ファイル名にはワイルドカードが使えます。ワイルドカードを正しく記述できれば、 ディレクトリの中に膨大なファイル数があっても、そのうちの一部のファイルだけ一気に 削除することも可能です。

 D:\test>del *.txt
                ← エラーなく削除されました
 D:\test>dir /b *.txt
 ファイルが見つかりません   ← 削除されたのでファイルはありません

 D:\test>

DEL * (ディレクトリ内のすべてのファイルを削除) を指定した時に限っては、念のため確認メッセージが出されます。

 D:\test>del *
 D:\test\*、よろしいですか (Y/N)? n
                              
 D:\test>           実行をキャンセルしました

この処理では、ディレクトリは削除されません。今回の例でいえば、renshuディレクトリは 削除されずに残ります。 ディレクトリを削除するには RMDIR という別のコマンドが用意されています。


4−3  移動( MOVE )

上記の COPY コマンドを MOVE に置き換えるとファイルの移動となります。 つまり、コピー元のディレクトリにはファイルが残りません。
D:\test\renshu のファイルをすべて D:\test へ移しましょう。

 MOVE 移動元ファイル名 移動先ディレクトリ名

 D:\test>cd renshu    ← カレントディレクトリを変更

 D:\test\renshu>move * ..
 D:\test\renshu\test.txt
 D:\test\renshu\test2.txt    ← 移動中...
 D:\test\renshu\test3.txt

 D:\test\renshu>dir /b
                             ← ファイルは残っていません
 D:\test\renshu>dir /b .. ← では、親ディレクトリには?
 renshu
 test.txt
 test2.txt                   ← ファイルが移りました
 test3.txt

 D:\test\renshu>


上記 move * .. は、 「カレントディレクトリの全てのファイル ( * ) 」を 「ひとつ上のディレクトリ ( .. ) 」に移動するという命令です。
カレントディレクトリを renshu に変更しなくても同じ処理は可能です。
D:\test はカレントディレクトリなので、略号 . で表現できます。

 D:\test>move renshu\* .     ← カレントディレクトリへ移動
 D:\test\renshu\test.txt
 D:\test\renshu\test2.txt      ← 移動中...
 D:\test\renshu\test3.txt

 D:\test>



4−4  ファイル名・ディレクトリ名変更 ( RENAME )

ファイル名の変更とディレクトリ名の変更は、同じコマンドで行います。
( MS-DOS の時代には、ディレクトリ名を変更するには別のコマンド RENDIR を使っていました。)
ファイル test.txt の拡張子 .txt を、 .doc に変更します。

 RENAME 旧ファイル名 新ファイル名
  または
 REN 旧ファイル名 新ファイル名

 D:\test>ren test.txt test.doc
                         ← エラーなく終了しました
 D:\test>ren test2.txt test2.doc
                         ← エラーなく終了しました
 D:\test>dir /b
 renshu
 test.doc                ← 拡張子が変わりました
 test2.doc               ← 拡張子が変わりました
 test3.txt

 D:\test>

ワイルドカードを使って、複数のファイルの名前を一気に変更することも可能です。 下の例では、拡張子 .doc のファイルの拡張子を全て .txt に戻します。

 D:\test>ren *.doc *.txt
                          ← エラーなく終了しました
 D:\test>dir /b
 renshu
 test.txt
 test2.txt                ← 拡張子が txt に戻りました
 test3.txt

 D:\test>


ファイル名の一括変更は、GUI環境では専用のツールを別途用意する以外にあり ませんが、DOS窓を使うと、基本のシステムだけで可能です。DOSコマンドと ワイルドカードの組み合わせが便利な時もあるものです。