Windowsでシンボリックリンク

Windows 2000以降ではディレクトリに対してはUNIXシンボリックリンクのようなものが作れることを遅ればせながら知りった。ファイルシステムレベルの機能で、ショートカットよりずっとシンボリックリンクに近い。

UNIXからWindowsへ入った人が感じることにWindowsにはシンボリックリンクがないことがある。ショートカットはWindows Explorerの機能なので、プログラムからファイルやディレクトリを参照する際に途中にショートカットを含めることはできない。

Cygwinではショートカットを利用してシンボリックリンクの機能を実現している。しかし、Cygwinシンボリックリンクはショートカットと同じではなく、Windows Explorerで作成したショートカットはCygwinではシンボリックリンクには見えない。Cygwin上のシンボリックリンクWindows Explorerでショートに見えるのだが。

NTFSには接合点(junction point)というUNIXシンボリックリンクに近い機能がある。シンボリックリンクがファイルもディレクトリも扱えるのに対して、接合点はディレクトリだけを扱う。
Windowsに標準で備わっているコマンドでは作成も削除もできないが、無料でダウンロードできるWindows Server 2003 Resource Kit Toolsに含まれているlinkd.exeを使うと作成・削除ができる。試しにWindows XPにインストールしてみたら何の問題もなく終わり、少なくともlinkd.exeは使えた。linkd.exeはWindows 2000 Resource Kitに含まれたのが最初のようでだが、それを探してみても見つからなかった。

使い方はUNIXのlnコマンドとは逆で以下の様式だ。

linkd リンク元 リンク先

たとえば以下により\appsができ、それは\Program Filesと等価になる。

linkd \apps "\Program Files"

コマンドプロンプトのdirコマンドでは接合点は以下のように見える。

>dir | find "apps"
2005/07/02  10:37         apps

>

Windows Explorerでは接合点はディレクトリに見える。また、Cygwinからもディレクトリに見える。
接合点の削除は以下の様式でおこなう。

linkd \apps /d