Edited at

Windowsでシンボリックリンク作成@非管理者権限環境

Windowsでは、シンボリックリンクの作成にmklinkコマンドを使います。


ファイルの場合

>mklink LINK_NAME TARGET



ディレクトリの場合

>mklink /D LINK_NAME TARGET


ただし、セキュリティ上の配慮から、無制限には実行できず、以下のいずれかの対応が必要です。

1. 管理者権限で起動したコマンドプロンプトの上で実行する

2. 事前にポリシーを変更しておく(20160313コメント反映 @asm さんありがとうございます)1

3. 事前に開発者モードを有効にしておく2

グローバルな設定に触りたくない場合、リンクを貼る際に毎度管理者権限でコマンドプロンプトを起動せねばならず面倒です。


管理者権限でmklinkを実行する

powershellを使います。

powershellでは、Start-Processコマンドに-Verb Runasオプションを指定することで、指定したコマンドを管理者権限で実行できます(実行時にUACの画面が出ます)。

そこで、以下のコマンドを用いることで、管理者権限でコマンドプロンプトを起動し直すことなくmklinkを実行することが出来ます。

powershell.exe -Command Start-Process -FilePath "cmd" -ArgumentList "/c","mklink","LINK_NAME","TARGET" -Verb Runas


処理をbatファイルにまとめる

上記のコマンドは、とても毎度タイプ出来る長さではないので、前処理などを含めてbatファイルにまとめ、パスの通ったディレクトリに設置します。Gistに一例置いておきました。

20190326追記

@cat2151 さんが、上記例をよりロバストに改良してくださいました。ありがとうございます。


batファイルの例

前処理の内容



  • LINK_NAMETARGETの順番を入れ替え(UNIX系のlnコマンドの順番にあわせた)

  • 渡された引数がファイルかディレクトリかを判別して/Dオプションを自動で付加

使い方

> ln-s TARGET LINK_NAME