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

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

[打越浩幸,デジタルアドバンテージ]
前のページへ 1|2|3       

 バッチの実体は、コマンドラインで実行するコマンド列を順に並べた、単なるテキストファイルである。だがその利用に当たっては、幾つか注意するべき点がある。最後に、それらの注意点や、バッチをさらにうまく使うための方法などについてまとめておく。

[注意]バッチファイルの名前は、既存のコマンド名と重複しないようにすること。

 バッチのコマンド名は任意に付けることができるが、すでに存在するコマンドと同じ名前を付けると、そちらの方が優先されて起動できないことがある。バッチファイル名をフルパス名や拡張子付きで呼び出せば起動できるが、トラブルの元なので避けるのが賢明だ。

[注意]バッチ中ではなるべくフルパスで記述すること

 バッチファイル中では、カレントフォルダやカレントドライブが意図していない場所になっていることがある(呼び出し元に応じて変わるため)。バッチの中でファイルやフォルダを利用する場合は、フルパス表記にするか、カレントドライブやカレントフォルダを変更するコマンド(cdやc:など)を最初に実行させて、曖昧性をなくすこと。

[注意]ユーザーへの問い合わせは抑制する

 バッチは基本的にはユーザーとの対話をせずに動作させるものである。コマンドによってはユーザーに確認のメッセージを提示して、[Y]か[N]などの入力を待つことがある。だがこのようなコマンドをバッチ中で使用すると、処理がそこで止まってしまい、先へ進まなくなる。

 コマンドにもよるが、ユーザーの介入なしに強制的に処理を進めるようなオプションがあれば、必ずそれを利用すること。

[TIPS]環境変数を活用して見通しをよくする

 前ページのrobocopyの例では、robocopyのパラメーターとしてパス名を直接記述していたが、このようなバッチファイルは後で修正したり、再利用したりするのが面倒になりがちだ。こんな場合は、「環境変数」という、一時的な値の保存機能(プログラミング言語における変数のようなもの)を使って、整理するとよい。

 環境変数に値を定義するには「set <名前>=〜〜」、参照するには「%<名前>%」とする(名前の大文字/小文字の違いは無視される)。これを使えば、場所を変更する場合はバッチファイルの先頭部分を編集するだけだし、コマンドが増えても対処は容易である。例えば次のようになる。

ユーザーファイルのrobocopyバックアップ(環境変数版1) ユーザーファイルのrobocopyバックアップ(環境変数版1)
ユーザーのDocumentsやPicture、Musicフォルダをrobocopyでバックアップする。コピー元やコピー先は、先頭にある環境変数にセットすること。

 なお、ユーザーのホームとなっているフォルダ(この例で言えばC:\Users\user01)は、「USERPROFILE」という環境変数で参照できるので、さらに次のようにすることもできる。こうすればユーザー名が変わっても、そのまま利用できる。

ユーザーファイルのrobocopyバックアップ(環境変数版2) ユーザーファイルのrobocopyバックアップ(環境変数版2)
バックアップ元のユーザーフォルダの場所を、汎用の%UserProfile%変数にしているので、どのユーザーでも使える。

 利用可能な環境変数については、「set」コマンドを実行するか、以下のTIPSを参照していただきたい。

[TIPS]Path環境変数にバッチコマンドの場所を追加して、すぐに使えるようにする

 ところで、前ページの例では、ユーザーのドキュメントフォルダ(C:\Users\user01\Documents)にバッチファイルを保存していた。このバッチファイルを実行する場合、カレントフォルダをC:\Users\user01にするか(cd C:\Users\user01\Documentsとする)、常にフルパス表記でC:\Users\user01\Documents\hello.cmdと指定する必要がある。

 だがこれはとても面倒だ。場所を覚えにくいし、使うのも面倒だし、他のユーザーに渡して使ってもらうの大変である。

 Windows OSにはPath環境変数という機能があり、この変数にセットされている場所(フォルダ)なら、フルパス表記でなくても実行できるようになっている。

 現在のPath環境変数の値は、コマンドプロンプト上で「path」コマンドか「set path」コマンドを実行すると確認できる。

PathコマンドでPathの設定を確認する PathコマンドでPathの設定を確認する

 ちょっと長いが、「PATH=」の後ろに、「C:\WINDOWS」や「C:\Program Files\〜」など、複数のフォルダ名が「;」記号で区切られて並んでいる。コマンドプロンプトがコマンドを探す場合、まずカレントフォルダを検索し、そこになければ、このPATH=で示される場所を左から順に探すようになっている。

 例えばコマンドプロンプト上で「notepad Hello.cmd」と入力すると、まずカレントフォルダにnotepadという名前のファイルがないかどうかを検索する。見つからなければPath環境変数を順にスキャンし、最終的にはC:\WINDOWS\System32\notepad.exeを見つけて、これを起動する。

 自分で作成したバッチファイルもこのPathの指すいずれかのフォルダに保存しておけば、「hello」と入力するだけで起動できて便利である。

 とはいえ、元からあるシステム設定を変更するのは望ましくない。C:\CommandやD:\Commandといったフォルダを作成し、その場所をPathに追加しておくとよいだろう。そして作成したバッチファイル(や自作のコマンド、ツールなど)をその中に保存するようにしておけばよい。

●Path環境変数へ新しいフォルダを追加する

 Path環境変数を設定するには、まずWindowsの検索窓で「環境変数」検索する。

環境変数の編集画面を起動する 環境変数の編集画面を起動する
環境変数Pathを編集するには、環境変数の編集画面を表示させる。

 検索結果のうち、[システム環境変数の編集]か[環境変数を編集]のいずれかを起動する。

 環境変数の画面が開いたら、上と下、いずれかに表示されている「Path」変数を選んで[編集]をクリックする。ユーザー環境変数側のPathに追加すると、そのユーザーのみ、システム環境変数側のPathに追加すると、システムを使う全ユーザーで、そのPathが有効になる。

Path環境変数の編集 Path環境変数の編集

 [編集]をクリックして編集画面を表示させ、バッチファイルを保存したフォルダ(C:\Commandなど)を、現在のPathに追加しておけばよい。すでにある値とは、「;」(セミコロン)で区切っておくこと。追加する場所はどこでもよく、前にあるほど、コマンドの検索が優先される。コマンドプロンプトを再起動すると、Path環境変数が有効になっているはずだ(Pathコマンドで確認する)。

[TIPS]バックアップコマンドをタスクスケジューラに登録して定期的に実行する

 バッチファイルが完成したら、それをタスクスケジューラに登録すると、定期的に実行できるようになる。毎時間、毎日、毎週など、任意のタイミングで実行できるようになる。タスクスケジューラの使い方については、以下の記事を参照していただきたい。

[TIPS]日付別にディレクトリを作成してコピーするには?

 ファイルを固定的な場所ではなく、例えば日付別にフォルダを作って、そこへ毎日コピーしたい、という用途もあるだろう。その場合は、コピー先(先のバッチファイルでいえば、「set dst=〜」の部分)を、日付別のフォルダ名になるようにすればよい。

 最初の例で、「echo %date%」として日付を表示できることを示したが、これを応用すれば日付をフォルダ名にすることも可能である。「%date%」で「2017/09/01」のような文字列が入手できるので、ここから数字部分だけを取り出せばよい(Windows OSでは「/」をファイル名に使えないため)。

 ただしこの部分は少々面倒なため、詳細については以下のTIPSを参照していただきたい。


 以上、全3回でコマンドプロンプトの基礎からバッチファイルまでを簡単に紹介してきた。GUIが進化しても、例えばファイルの定期的なバックアップといった作業なら、copyコマンド1つで済むCUIはまだまだ有用だろう。コマンドプロンプトと言えば、Windows OSよりも前からある、非常に古めかしい技術と思われるだろうが(実際古いが)、むしろ何も進化していない分だけ、互換性だけは非常に高い(本連載で紹介している機能は20年以上も前から何も変わっていない)。今後もまだまだ、コマンドプロンプトの必要性はなくならないだろう。

前のページへ 1|2|3       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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