MySQLやCMDをSendToから開く方法

MySQLコンソールやCMDプロンプトをエクスプローラディレクトリツリーの任意の場所から開きたい。CMDプロンプトは、スタートメニューから「ファイル名を指定して実行」で開いたり、デスクトップにショートカットを置いて、そこから開くという人は多いのではないだろうか。

私は、右ボタンメニューから辿れる「送る(SendTo)」に「→CMDを開く」と「→MySQLコンソールを開く」を追加している。その小技を紹介しよう。まず、SendToはVistaの場合、C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\SendTo にある。では、設定の手順だ。

(1) batファイルをそれぞれ任意の場所に作る。仮にC:\tempにopen-cmd.bat、open-mysql.batを作ることにする。まずopen-cmd.batにはとりあえず、以下のように書くことにしよう。ディレクトリを移動させ、CMDを呼び出すだけだ。この「ディレクトリを移動できる」という点がポイントなのだ。


chdir %1
call cmd
(2)またopen-mysql.batにも同様に、以下の感じに書くことにしよう。ディレクトリを移動させ、mysqlに接続する。PATHは必要に応じて書いても書かなくてもいい。接続したいDBや接続のためのユーザー名とパスワードは任意に記述のこと。勿論、MySQLを使っている方だけの話だが、オラクルのsqlplusコマンドプロンプトなどにも応用は利くはずだ。「ディレクトリを移動できる」ので、sqlファイルをsourceコマンドで読み込むときなど便利だと思う。

set PATH=%PATH%;C:\Program Files\MySQL\MySQL Server 5.1\bin
chdir %1
mysql -uroot -p*** mysql
(3)open-cmd.batやopen-mysql.batが作成できたら、これらのショートカットを作成し、適当にリネームして、それをSendToに配置する。SendToはVistaの場合、C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\SendTo にある。batファイルを任意の場所に作成して、そのショートカットをSendToに置くだけだ。

C:\
+-- Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\SendTo\
| +-- →CMDを開く # open-cmd.batのショートカット
| +-- →MySQLコンソールを開く # open-mysql.batのショートカット
+-- temp\
+-- open-cmd.bat
+-- open-mysql.bat
以上だ。これでエクスプローラで任意のディレクトリを選択して、右ボタンメニューの「送る(SendTo)」からCMDプロンプトやMySQLコンソールなどが開く。ディレクトリも移動してくれているので、作業がしやすい。

もう少し高度に記述したいなら、open-cmd.batは以下のようになる。上記では%1でbatに与えられた第1引数からディレクトリ名を受け取っているが、いろいろと問題のある場合もある。ディレクトリでなくファイルの場合でも動作するようにしておきたい。またディレクトリ名にスペースが含まれているとうまくいかない。それを改善したものが以下になる。


@echo off
chdir "%~p1"
chdir "%~n1" 2>nul
echo on
call cmd
同様にopen-mysql.batは以下の感じになる。

@echo off
set PATH=%PATH%;C:\Program Files\MySQL\MySQL Server 5.1\bin
chdir "%~p1"
chdir "%~n1" 2>nul
echo on
mysql -uroot -p*** mysql
"%~p1"と"%~n1"で2段階でchdirさせることでディレクトリにもファイルにも対応できる。ファイルの場合、2つ目のchdirでエラーになるが、@echo off と 2>nul の組み合わせで表示されないようにしている。ただし、これでもリーフのディレクトリ名に'.'が含まれている場合や、ファイル名と同じディレクトリが並んでいる場合には正しくchdirされないという些細な問題は残っている。コマンドだけでは限界だろう。不満がある方は、%1で与えられたパスをパースしてディレクトリ名のみを確実に抽出するプログラムを書けばいい。

"%~p1"、"%~n1"、2>nulの組み合わせがものすごく気に入ってしまった。敬意を評したい。