連載
» 2017年09月15日 05時00分 公開

バッチコマンドで定型処理を行う超入門コマンドプロンプト(2/3 ページ)

[打越浩幸,デジタルアドバンテージ]

 GUIでは面倒だが、CUIなら簡単にできる操作の例として、第1回では、ユーザーのドキュメントフォルダをバックアップする作業例を示した。

 今度は、この作業を実際にバッチコマンドとして作成して実行してみよう。

GUIでは簡単ではない操作の例:作業フォルダ全体をバックアップフォルダに定期的にコピーする GUIでは簡単ではない操作の例:作業フォルダ全体をバックアップフォルダに定期的にコピーする
あるフォルダの内容を、バックアップフォルダに定期的にコピーするのは管理業務などではありがちな処理だ。CUIならコマンド1つで簡単に実行できる。これをバッチで実行してみる。

 このバックアップを行うためのコマンドとしては、前回紹介したrobocopyを使ってみよう。

 robocopyコマンドの使い方は簡単で、コマンド名に続けて、コピー元とコピー先のフォルダ名を指定するだけである。必要に応じて、コピーの方法を制御したり、ログファイルを残したりするためのオプションなども追加できる。

robocopyコマンドの使い方 robocopyコマンドの書式

 robocopyとそのオプションについては、以下のTIPSを参照していただきたい。

 一番簡単なフォルダのバックアップ方法を記述すると次のようになる。

robocopyコマンドの例 robocopyコマンドの例

 これは、カレントフォルダにあるDocumentsというフォルダの内容を全て、D:の\BackupFolderという名前のフォルダへコピーするというコマンドである。

 robocopyはフォルダからフォルダへのコピーを行うコマンドなので、コピー元もコピー先もフォルダ名にすること。

 「/mir」というオプションは、「ミラーモード」でコピーする、という指示だ。このオプションなしでこのコマンドを何度も実行すると、コピー先フォルダには、新しいファイルがどんどん追加されるだけで、消されることはない。

 一般的なPCの使い方では、不要になったファイルはどんどん消したり、ときどきファイル名を変更したりするだろう。/mirオプションなしでrobocopyコピーを何度も行うと、コピー元ではすでに消したはずのファイルや、名前の変更前のファイルやフォルダがコピー先にもずっとそのまま残ることになる。結果、コピー先のフォルダが不要なファイルでいっぱいになってしまう。

 そこで出てくるのが/mirオプションである。/mirを付けると、コピー先の内容が常にコピー元と同じになるように、必要ならファイルの削除も行う。

 最後にある「/r:1 /w:1」は、エラー時のリトライを抑制するオプションである。ファイルが使用中などの理由で読み出しや書き込みが一時止まることがあるが(つまり、バッチの実行が一時停止する)、自動化させる場合には不都合なので、これを抑制している。

 さてそれでは一度このコマンドを実行してみよう、と言いたいところだが、1つ重要な注意点がある。このコマンドを実行するためには、カレントフォルダがDocumentsフォルダの1つ上の親フォルダになっている必要がある、ということだ。それ以外の場所で実行するとDocumentsフォルダが見つからずエラーになる。

 これでは使いづらいので、少し改良してみよう。

絶対パスを使うrobocopyコマンドの例 絶対パスを使うrobocopyコマンドの例

 先の例との違いは、コピー元を絶対パス指定にしている点である。これでカレントフォルダやカレントドライブの場所がどこであっても、常にコピーが成功する。

 試しにこのコマンドを手動でコマンドプロンプトに入力して実行していただきたい。Documentsフォルダの内容が、d:\BackupFolderという名前のフォルダにコピーされる。

 なおバックアップ先のフォルダには、C:\Users\user01\Documentsの中にあるファイルやフォルダが、全部そのまま展開されることになる。d:\BackupFolderの中にさらにDocumentsというフォルダを作成させて、その中にコピーさせたければ、コピー先としてd:\BackupFolder\Documentsと指定する。

フォルダをコピーするためのバッチコマンド

 さてそれでは、以上のことを反映して、robocopyコマンドを最終的なバッチファイルにしてみよう。

robocopyコマンドの例(最終版) robocopyコマンドの例(最終版)

 念のためにコピー先を作成するコマンドも先頭に追加しておいた。本来ならば、コピー先フォルダが存在するか、作成できるか、などをチェックしなければならない。このためにはifコマンドを使う必要があるが、難しくなるのでここでは省略する。必要なら以下を参照していただきたい。

 ところで、このように試行錯誤しながらコマンドを改良、機能追加していくのは、バッチファイルではよくことである。バッチはデバッグ機能が貧弱なため(というか、デバッグサポートは何もない)、少しずつコマンドやオプションを追加して、動作を確認しながら開発を進めよう。

バッチを実行する

 以上のようなコマンドを含むバッチファイルを作成し、例えば「MyBackup.cmd」というファイル名で保存する。

 作成したバッチを実行するには、2通りの方法がある。コマンドプロンプト上から直接起動する方法と、エクスプローラなどからクリックして起動する方法だ。

●コマンドプロンプトからバッチを起動する

 バッチファイルはCUIで実行するコマンド列を記述したものなので、コマンドプロンプトから起動するのが一番多い使い方だ。この場合は、単にバッチファイル名を入力すると実行される。

 例えば「MyBackup.cmd」というバッチファイルを起動するなら、拡張子の部分を省いて「MyBackup」」と入力すればよい。バッチファイルの拡張子には「.cmd」と「.bat」の2つがあるが、どちらなのかをいちいち調べるのは面倒だし、不要なので、指定しなくてもよい(指定してもよいが)。

 バッチファイルがカレントフォルダにない場合は、フルパス名で「C:\Users\user01\Documents\MyBackup」のように指定する。

バッチの実行結果 バッチの実行結果

●エクスプローラからバッチを起動する

 もう1つの実行方法は、エクスプローラでバッチファイルをダブルクリックして実行する方法だ。バッチファイルに対するショートカットをデスクトップなどに作成しておいて、それをダブルクリックしてもよい。ショートカットを作成するには、エクスプローラでバッチファイルを右クリックしてデスクトップへドロップし、「ショートカットをここに作成」を実行する。

バッチファイルへのショートカットを作成する バッチファイルへのショートカットを作成する

 こうやって作成したショートカットをダブルクリックすると、画面に黒いコマンドプロンプトの画面が表示され、その中でバッチが実行される。そして実行が終了すると、コマンドプロンプトのウィンドウが閉じられる。

 この方法は、GUIの操作に慣れたユーザーには使いやすいだろう。

バッチファイルの再編集

 バッチファイルの内容を変更したい場合は、単にエディタで開いて編集すればよい。コマンドプロンプトだと「notepad appbackup.cmd」のようにする(拡張子まで指定すること。省略すると.txtファイルとして作成/編集することになる)。

 ショートカットを作成している場合や、エクスプローラから編集したい場合は、バッチファイル(へのショートカット)を右クリックして[編集]メニューを選ぶと、テキストエディタが起動して、編集できるようになる。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。