2013年7月5日金曜日

[windows] Windows上で(ショートカットでない)シンボリックリンク作る方法

Windows上でもシンボリックリンクが使えたら・・・、と考えたことはないでしょうか。

自分の場合、複数(バージョン)の開発環境を切り替えて使う目的でシンボリックリンクが欲しいとずっと思っていました。例えば、Javaの開発環境であればC:\JavaからC:\Program Files\Java\jre7にシンボリックリンクを張っておき、C:\Java以下のbinやlibにパス・クラスパスを設定しておきます。こうしておけば、JDK7からJDK6に環境を切り替えたいときには、C:\Javaのリンク先をC:\Program Files\Java\jre6に変更するだけでOK!という算段です。

前置きが長くなりましたが、mklinkというコマンドを利用すれば、Windows上でもシンボリックリンクを張ることができます。ショートカットではディレクトリ階層を辿れませんがmklinkであればそれが可能になります。

C:\> mklink /?
シンボリック リンクを作成します。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

        /D          ディレクトリのシンボリック リンクを作成します。既定では、
                    ファイルのシンボリック リンクが作成されます。
        /H          シンボリック リンクではなく、ハード リンクを作成します。
        /J          ディレクトリ ジャンクションを作成します。
        リンク      新しいシンボリック リンク名を指定します。
        ターゲット  新しいリンクが参照するパス (相対または絶対)
                    を指定します。

mklinkはdirやcopyと同じ内部コマンドです。exeが存在している訳ではありません。 また、cygwin上でも正しくリンクを解決してくれるので重宝しています。
#cygwin上のlnがmklink相当の動作をしてくれると嬉しいのですが残念ながらそうはなっていません。

ただ一点、気をつけないといけないのが、ディレクトリのリンクを作るときには"/D"オプションを付ける必要がある点。UNIXのlnはディレクトリもファイルも区別されませんが、mklinkでは引数を忘れるとディレクトリをたどれなくなります。