Windowsでシンボリックリンク張るユーティリティ作ってみた

単にコマンドライン引数取ってWin32APIのCreateSymbolicLinkに投げただけ。
DOS窓以外から使う事にこだわらなければDOSにmklinkって内蔵コマンドがあるからそれを使うとお手軽気楽。
なお、OSの都合上Vista以降じゃないとシンボリックリンクは作れません。
さらに管理者権限で動かさないとシンボリックリンクは作れません。
色々面倒です。


シンボリックリンク作成コマンドの自作が面倒な人は以下のリンクからどうぞ。
http://www.oborogin.org/ar/mklnk.zip
ライセンスについてはこちら *1
使い方は同封したテキストファイルにも書いたけどこっちにも書いておきます。


DOS窓PowerShellなどから使うことを想定して作成しています。
パスの通った所に適当に配置し、mklnk リンク対象タイプ -o 出力シンボリックリンクパス -l リンク先パス と管理者権限で起動したシェルに入力します。
パスの指定は絶対パスです。
リンク対象タイプと書いてある部分には -f か -d を指定します。
リンク対象がファイルの場合は -f を、ディレクトリの場合は -d を指定します。


なお、PowerShellから使う場合は以下のようなスクリプトを挟むとさらに手間が減ります。

param([string]$link, [string]$output, [switch]$help)

if(-not($link -and $output) -or $help){
	"オプション:
  -help  ヘルプを表示
usage:
  ln -link <String> -output <String>"
}else{
	# 対象がディレクトリかファイルか判別
	$target = Get-Item $link
	if($target.GetType().Name -eq "DirectoryInfo"){
		# シンボリックリンクの対象がディレクトリ
		$parameters = "-d -l $link -o $output"
	}else{
		# シンボリックリンクの対象がファイル
		$parameters = "-f -l $link -o $output"
	}
	$shell = New-Object -com Shell.Application
	$shell.ShellExecute("mklnk", "$parameters", "", "runas")
}

mklnkではシンボリックリンクの対象がファイルなのかディレクトリなのか手動で設定し、管理者権限で動かす必要がありました。
このPowerShellスクリプトではそこを自動化して手間を減らしています。

*1:要するにudukiが著作権持ってるファイルは好きにしていいという内容のライセンス