« Excelの終了を待ち合わせる。 | トップページ | VBAでn秒後に自動的に閉じるメッセージボックス »

2008年1月10日 (木)

ショートカットに相対パスを指定する。

ショートカットに相対パスを指定することができるか?という質問がよくあります。
その答えは、
ショートカットファイルからの相対パスは、できない。
カレントディレクトリからの相対パスなら、できる。

エクスプローラからショートカットファイルをダブルクリックしたときのカレントディレクトリはショートカットファイルの場所なので、それでよければ、ショートカットのターゲットと引数を以下のように指定します。

%windir%\system32\rundll32.exe shell32.dll,ShellExec_RunDLL "相対パス" [引数...]

もし、ショートカットの作業フォルダを指定すると、そこからの相対パスになります。
なので、ショートカットの作業フォルダは、空にしておきます。

もし、引数が不要なら、

%windir%\system32\rundll32.exe url.dll,FileProtocolHandler "相対パス"

でも可。

単にフォルダを開くだけなら、

%windir%\explorer.exe /n,"相対パス"

%windir%\explorer.exe /e,"相対パス"

でも可。

あるいは、また、

%COMSPEC% /C START "" "相対パス" [引数...]

として、最小化にしておきます。

フルパスが必要な場合は、例えば、

%COMSPEC% /C START "" "file://%CD%\相対パス" [引数...]

とします。

ショートカットファイルからの相対パスは無理ですが、バッチファイルやWSH、HTM、HTAなら%~f0やWScript.ScriptFullName、location.pathnameで自身のパスを得て代替できます。

バッチファイル

CD /D "%~dp0"
START "" "相対パス" [引数...]

VBSファイル

CreateObject("Shell.Application").ShellExecute "相対パス","[引数...]",WScript.ScriptFullName & "\.."
WScript.Sleep 5000