mklink
update 2020-06-02


mklink
(MaKe LINK)

Windowsのコマンドである。(Linux の ln コマンドと用途は同じ)
ファイルやディレクトリのリンク(参照)を作るときに使う。


※ショートカットは他のファイルのファイルパスを保持するファイルである。(単なるファイルであり、実際のリンクではない)



個人フォルダの「場所」移動(
ユーザーフォルダの Location 移動)

Windowsをインストールするとユーザープロファイルが作成され、個人フォルダが作成される。
例えば、アカウント user1 を作成すると C:\Users\user1フォルダが作成されて次のようなサブフォルダが作成される。
Documents(ドキュメント) Music(ミュージック) Pictures(ピクチャ) Videos(ビデオ)
dir C:\Users\user1 でuser1フォルダ内の 英字名のフォルダが確認できる

これらのフォルダはシステムフォルダであり、ユーザープロファイルが関係しているので、別のドライブへの「場所」移動はレジストリ情報も考慮して行なう必 要がある。
※システムフォルダのプロパティを開いて「場所」タブが存在しないフォルダは、移動しないほうがベターである。(上記の C:\Users フォルダ、C:\Users\user1 フォルダのことである)

一例として Documents(ドキュメント)には「場所」タブがあるので、この画面にしたがって「移動」ができる。
移動した「場所」から「標準に戻す(デフォルトの場所)」こともできる。
※システムフォルダのPathを確認するには dir コマンドで確認する。(dir C:\Users\user1 で英字名のフォルダが確認できる)
※ファイルバックアップを行なう場合は、ファイル復元に配慮して、元の場所に戻して(標準に戻して)おくほうがベターである。
location-tab.png


コマンド処理での場所移動

ここではDocumentsフォルダ、user1フォルダ、Usersフォルダをmklinkコマンド処理で別のドライブに移動する方法を試してみる。
※この方法ではレジストリはいじらない。
※作業上での条件は次の通りである。
(1) 「Shift + 再起動」(Safemode)でのコマンドプロンプト起動で行なう。(Windows起動中の環境では正常に処理できない)
(2) robocopy /copyall /mir /xj パラメータでフォルダコピーする。( xcopyでは正常に処理できない)
(3) mklink でディレクトリ ジャンクションを作成する。( mklink /J パラメータを指定する)
(4) 作業を行なうための ドライブ E を作成しておく。


Documentsフォルダの移動 (1つのフォルダを指定して移動する例である)

1. 「Shift + 再起動」(Safemode)でのコマンドプロンプト起動。
Win10「スタート」ボタン->「電源」->「Shift + 再起動」->オプションの選択画面が表示されるので「トラブルシューティング」->「詳細オプション」->「コマンドプロンプト」で再起動。
ユーザー名、パスワードを入力するとSafemodeのコマンドプロンプト画面になる。
プロンプト表示は X:\Windows\system32となっている。

dir コマンドでドライブやフォルダがあることを確認。
dir C:\Users\user1 で Documentsフォルダがあることを確認。
dir E: で 作業用に使うための E:\ドライブがあることを確認。(無ければ 前もって作成しておく)

2. Documentsフォルダを別のドライブに(E:\Documents)コピーする。
robocopy /copyall /mir /xj C:\Users\user1\Documents E:\Documents
※フォルダ名はDocuments(先頭大文字)にしておくと、あとで分かりやすい。
/COPYALL はファイル情報をすべてコピーする
/MIR はディレクトリ ツリーをミラー化する
/XJ は接合ポイントとシンボリック リンクを除外する (通常は既定で含まれる)

3. コピーの済んだ C:\Users\user1\Documentsを削除する
rmdir /S /Q C:\Users\user1\Documents
/S はディレクトリツリーを削除する。(ディレクトリおよびサブディレクトリも含めてすべてのファイルを削除)
/Q はQuiet(確認メッセージを表示しない)

4. ディレクトリジャンクションを(C:\Users\user1\Documents)作成する。
mklink /J C:\Users\user1\Documents E:\Documents
「C:\Users\user1\Documents <<===>> E:\Documents のジャンクションが作成されました」と表示される
 
5. exit でコマンドプロンプト終了。

6.PC再起動する。

7. C:\Users\user1フォルダ傘下にDocumentsフォルダ(英字)ができている。
ショートカットリンク アイコンが付いている。(プロパティには「場所」タブが存在している)

E:ドライブには日本語の「ドキュメント」フォルダが作成されている。(dirコマンドで確認すると、英字のDocumentsとなっている)
※ディレクトリジャンクションであるため、C:\Users\user1\Documentsの日本語名が表示されている。
リンクが作成されているので、C:\Users\user1\Documentsのファイルを更新すればE:\ドキュメントのファイルに反映される。

移動したDocumentsフォルダを元に戻す
※「Shift + 再起動」(Safemode)でのコマンドプロンプト起動で行なう。

1. ジャンクションを無効にするために、いったんE:\Documents を E:\Documents2にmoveする。(フォルダ名の変更)
move E:\Documents E:\Documents2

2. 作成しているジャンクション ディレクトリを削除する。
rmdir C:\Users\user1\Documents

3.robocopyで元のフォルダにコピーする。
robocopy /copyall /mir /xj E:\Documents2 C:\Users\user1\Documents

4. exit でコマンドプロンプト終了。

5. PC再起動して正常に動作することを確認する。
C:\Users\user1には、日本語のフォルダ名で「ドキュメント」が作成されている。
※戻したフォルダ「ドキュメント」のプロパティには「場所」タブが存在している。

6. レジストリをいじることなく元の状態に戻った。

7. 作業用に作成したフォルダを削除する。
E:\Documents2は、日本語名の「ドキュメント」になっている。
E:\Documents2は、Windows起動状態でのエクスプローラで削除できる。


Users\ユーザー名 フォルダの移動 (「Users\ユーザー名」 フォルダ内にあるフォルダおよびファイルを全て移動する処理である)
※「Users\ユーザー名」 フォルダのプロパティには「場所」タブが無いので、通常の方法では別ドライブへの「場所移動」は出来ない。
※移動するフォルダが異なるだけで、作業手順は既述の「Documentsフォルダの移動」と同じである。

移動前は次のような環境になっているものとする。
user1 フォルダのサブフォルダを全て移動することになる。
user1-1.png

1. 「Shift + 再起動」(Safemode)でのコマンドプロンプト起動。
Win10「スタート」ボタン->「電源」->「Shift + 再起動」->オプションの選択画面が表示されるので「トラブルシューティング」->「詳細オプション」->「コマンドプロンプト」で再起動。
ユーザー名、パスワードを入力するとSafemodeのコマンドプロンプト画面になる。
プロンプト表示は X:\Windows\system32となっている。

dir コマンドでドライブやフォルダがあることを確認。
dir C:\Users で \user1フォルダがあることを確認。
dir E: で 作業用に使うための E:\ドライブがあることを確認。(無ければ 前もって作成しておく)

2. user1フォルダを別のドライブに(E:\user1)コピーする。
robocopy /copyall /mir /xj C:\Users\user1 E:\user1
※user1フォルダをすべてコピーするので、少し時間がかかる。

3. コピーの済んだ C:\Users\user1を削除する
rmdir /S /Q C:\Users\user1
/S はディレクトリツリーを削除する。(ディレクトリおよびサブディレクトリも含めてすべてのファイルを削除)
/Q はQuiet(確認メッセージを表示しない)

4. ディレクトリジャンクションを(C:\Users\user1)作成する。
mklink /J C:\Users\user1 E:\user1

5. exit でコマンドプロンプト終了。

6.PC再起動する。

7. C:\Usersフォルダ傘下にuser1フォルダができている。
リンク アイコンが付いている。
E:ドライブには「user1」フォルダが作成されている。
リンクが作成されているので、C:\Users\user1のファイルを更新すればE:\user1のファイルに反映される。
user1-2.png
user1-3.png

移動したuser1フォルダを元に戻す
※「Shift + 再起動」(Safemode)でのコマンドプロンプト起動で行なう。

1.ジャンクションを無効にするために、いったんE:\user1 を E:\user1-2にmoveする。(フォルダ名の変更)
move E:\user1 E:\user1-2

2. 作成しているジャンクション ディレクトリを削除する。
rmdir C:\Users\user1

3.robocopyで元のフォルダにコピーする。
robocopy /copyall /mir /xj E:\user1-2 C:\Users\user1

4. 作業用に作成したフォルダを削除する。
rmdir /S /Q E:\user1-2

5. exit でコマンドプロンプト終了。

6. PC再起動して正常に動作することを確認する。

7. レジストリをいじることなく元の状態に戻った。
user1-4.png



Usersフォルダの移動 (「Users」 フォルダ内にあるフォルダおよびファイルを全て移動する処理である)
※「Users」 フォルダのプロパティには「場所」タブが無いので、通常の方法では別ドライブへの「場所移動」は出来ない。
※移動するフォルダが異なるだけで、作業手順は既述の「Documentsフォルダの移動」と同じである。

※Usersフォルダ内のすべてのサブフォルダも「場所」移動するので、必ずしも使いやすいとは言えない。
※ 運用には留意する必要がある。(システムのバックアップや復元を行なう場合は、元の状態に戻して行なう)


1.「Shift + 再起動」(Safemode)でのコマンドプロンプト起動。
Win10「スタート」ボタン->「電源」->「Shift + 再起動」->オプションの選択画面が表示されるので「トラブルシューティング」->「詳細オプション」->「コマンドプロンプト」で再起動。
ユーザー名、パスワードを入力するとSafemodeのコマンドプロンプト画面になる。
プロンプト表示は X:\Windows\system32となっている。

dir コマンドでドライブやフォルダがあることを確認。
dir C:\ で \Usersフォルダがあることを確認。
dir E: で 作業用に使うための E:\ドライブがあることを確認。(無ければ 前もって作成しておく)

2. Usersフォルダを別のドライブに(E:\Users)コピーする。
robocopy /copyall /mir /xj C:\Users E:\Users
※フォルダ名はUsers(先頭大文字)にしておくと、あとで分かりやすい。
※Usersフォルダをすべてコピーするので、少し時間がかかる。

3. コピーの済んだ C:\Usersを削除する
rmdir /S /Q C:\Users
/S はディレクトリツリーを削除する。(ディレクトリおよびサブディレクトリも含めてすべてのファイルを削除)
/Q はQuiet(確認メッセージを表示しない)

4. ディレクトリジャンクションを(C:\Users)作成する。
mklink /J C:\Users E:\Users

5. exit でコマンドプロンプト終了。

6.PC再起動する。

7. C:\Usersフォルダ傘下にuser1フォルダ、パブリックフォルダができている。
Usersフォルダのアイコンにはリンクアイコンが付いている。
フォルダ名変更で「ユーザー」としてもOKだが、識別するため、英語のままとしておく。
E:ドライブには日本語の「ユーザー」フォルダが作成されている。(dirコマンドで確認すると、英字のUsersとなっている)
リンクが作成されているので、C:\Usersフォルダ内のファイルを更新すればE:\ユーザー フォルダ内のファイルに反映される。

移動したUsersフォルダを元に戻す
※「Shift + 再起動」(Safemode)でのコマンドプロンプト起動で行なう。

1.ジャンクションを無効にするために、いったんE:\Users を E:\Users2にmoveする。(フォルダ名の変更)
move E:\Users E:\Users2

2. 作成しているジャンクション ディレクトリを削除する。
rmdir C:\Users

3.robocopyで元のフォルダにコピーする。
robocopy /copyall /mir /xj E:\Users2 C:\Users
※Usersフォルダをすべてコピーするので、少し時間がかかる。

4. exit でコマンドプロンプト終了。

5. PC再起動して正常に動作することを確認する。
C:\Usersには、日本語のフォルダ名で「ユーザー」が作成されている。

6. レジストリをいじることなく安全に元の状態に戻った。

7. 作業用に作成したフォルダを削除する。
E:\Users2はWindows起動状態でのエクスプローラで削除できた。


システムの個人用フォルダを使わずに、任意のリンクフォ ルダを作成して運用する。

mklink コマンドでフォルダリンクを作成すれば、デフォルトの「場所」ではなくて任意の「場所」にフォルダを作成して運用できる。
たとえばSSDの容量を気にしないで、別のHDDのドライブにデータを置いて運用できる。
※SSDのリンクフォルダ、ファイルを操作すれば、ターゲットであるHDDのフォルダ、ファイルへ反映される。
※SSDにはリンク情報である小さなファイルがあるだけで、ファイル実体のデータはHDDにあるので、大きなデータをSSDに置いておく必要がない。

mklink コマンド
mklink [/D] | [/H] | [/J]] リンク(Link:Link名) ターゲット(Target:Linkが参照するPath)
※リンクとターゲットはミラーなので、リンクまたはターゲットの内容を変更すると、ディレクトリの構成も含めて、お互いのファイル、ディレクトリに変更が反映され る。
※リンク フォルダ/ファイル を削除しても ターゲット フォルダ/ファイルは影響を受けない。

パラメータなし、の場合はファイルのシンボリックリンク(ファイルのポインタへのリンク)を作成する。
mklink  [新しいファイル名] [リンク先(実体)のファイル名]
(例) mklink  c:\users\user1\target.txt e:\target.txt
※e:\target.txtファイルのシンボリックリンクファイルが c:\users\user1\target.txtに作成される。
シンボリックリンクファイルにはリンクアイコンが付いている。

シンボリックリンクファイルの削除は del コマンド。

file_symlink.jpg

ディレクトリ シンボリックリンクを作成
する(フォルダのポインタへのリンク)
mklink /D [新しいフォルダ名] [リンク先(実体)のフォルダ名]
(例)mklink /D c:\users\user1\D-target e:\D-target

リンクフォルダにはリンクアイコンが付いている。
ターゲットは他のドライブ、リモートPCの共有フォルダでも構わない。
(例) mklink /D c:\Users\user1\mylink\PC2-D-target \\PC2\D-target

ディレクトリ シンボリックリンク の削除は rmdir コマンド。
directory_symlink.jpg

ディレクトリ ジャンクションを作成する
ターゲットは他のドライブでも構わない。
mklink /J [新しいフォルダ名] [ドライブパスやフォルダパス]
(例) mklink /J c:\users\user1\J-target e:\J-target

リンクフォルダにはリンクアイコンが付いている。

ディレクトリ ジャンクション の削除は rmdir コマンド。
directory_janction.jpg

ハードリンク作成(同じパーティション内でのファイルリンク)
mklink /H [新しいファイル名] [リンク先(実体)のファイル名]
(例) mklink /H c:\users\user1\H-target.txt c:\H-target.txt
※ハードリンクのリンクファイルは実体のファイルである。(下図参照。ハードリンク ファイルにはリンクアイコンは付かない)
※ターゲットであるファイルを削除しても、リンクファイルは削除されないで残っている。
user1-6.png


end of list