Windowsでショートカットを相対パスで作る

Windowsのショートカットは通常、作成すると絶対パスになっています
f:id:keiaruesu:20211213031313p:plain

月ごとにフォルダ分けしてる等で何度もコピーして使いまわすフォルダだと、フォルダ内にあるショートカットはは絶対パスでなく相対パスでショートカットを作りたいということはちょくちょくあると思います
そこで相対パスのショートカットの作り方です

やり方

たとえば上記のテキストファイルのショートカットの場合、相対パスにするためにはショートカットのプロパティのリンクを以下に書き換えます

::ショートカットのパスを以下に変更する
C:\テストフォルダ\サンプルテキスト (1).txt"
↓
::どっちの表記でもイケる
%windir%\explorer.exe ".\サンプルテキスト (1).txt"
%windir%\explorer.exe "サンプルテキスト (1).txt"

こんな感じ
リンク先のパスを書き換えるのだけど
作業フォルダのパスを空にすることも重要なので忘れないようにしよう
f:id:keiaruesu:20211213042307p:plain

フォルダ階層の下にある場合はこんな感じに書く

::ショートカットのパスを以下に変更する
"C:\テストフォルダ\サンプルフォルダ\フォルダ2\サンプルテキスト (2).txt"%windir%\explorer.exe ".\サンプルフォルダ\フォルダ2\サンプルテキスト (2).txt"

もちろんファイルだけでなくフォルダのショートカットでもイケる

::ショートカットのパスを以下に変更する
"C:\テストフォルダ\サンプルフォルダ\フォルダ2"%windir%\explorer.exe ".\サンプルフォルダ\フォルダ2"

相対パスで上の階層にあるファイルのショートカットを作る場合

::"C:\テストフォルダ\"にあるショートカットから
::"C:\TestFolder2\SampleText.txt"にアクセスする
%windir%\explorer.exe "..\TestFolder2\SampleText.txt"

解説

書式

書式はこんな感じ

::相対パスショートカットの書式
%windir%\explorer.exe "リンク先のパス"

「%windir%\explorer.exe」はWindowsエクスプローラを起動している
「"リンク先のパス"」に相対パスを記入する
つまりこれはショートカットというよりファイルパスを指定してエクスプローラを開くコマンドなんだね

フォルダの移動

「.\」は現在ショートカットが存在しているフォルダの位置になる、ここを基準にパスを移動させて行く。別になくても行けるのだが付けておいたほうが相対パスだとわかりやすいと思う
「.\」は自身の場所で「..\」と書くと一つ上のフォルダを指定することができる

階層 書式
同じ階層の場合 「.\ファイル名」
「ファイル名」
下の階層の場合 「.\フォルダ名\ファイル名」
上の階層の場合 「..\ファイル名」
2階層上の場合 「..\..\ファイル名」
1階層上にある別フォルダのファイル 「..\フォルダ名\ファイル名」

といった感じ

注意点

作成したショートカットは相対パスなのでショートカット自身を別のフォルダに移動させると動かなくなる