windows10でmklinkが見つからないのは、コマンドプロンプト内蔵コマンドだからです

シェアする

vagrantでwindowsのホストOSの共有フォルダにシンボリックリンクを張ることができません。そんなとき、windows側でリンクを張ることで対応可能です。

windows側でシンボリックリンクを作成するコマンドは、mklinkです。

windows10でmklinkが見つからないのは、コマンドプロンプト内蔵コマンドだからです

ところが、Git bashでmklinkと実行しても見つかりませんし、Windows PowerShell で実行してもコマンドが見つかりません。

どちらも、ファイルとして独立しているコマンドを探しているからです。mklinkはコマンドプロンプトの内蔵コマンドのため、コマンドプロンプトからしか実行できません。

PowerShell、Git Bashからcmdを実行すれば、mklinkも実行できます

コマンドプロンプトは、cmd.exe というファイルになってるので、PowerShellやGit Bash からもcmd と打ち込めば、コマンドプロンプトが起動します。

起動したコマンドプロンプトからは、mklinkを実行することはできます。

ただし、管理者権限が必要

ただし、一つ注意点は、mklinkでシンボリックリンクを作るのには管理者権限が必要なことです。よって、PowerShellやGit Bashを起動するとき、管理者権限で実行してない場合、cmd コマンドでコマンドプロンプトを実行しても、権限がないとエラー発生してしまいます。

管理者権限がないときはエラー発生

mklink コマンドの /d はフォルダの意味、リンク名 元フォルダ の順に指定します。せっかくcmdを実行してmklinkが見つかっても、権限がないため、エラー終了しています。

管理者権限ありのコマンドプロンプトを起動する3つの方法

mklinkでシンボリックリンクを作成するためには、

  • コマンドプロンプトを管理者権限で起動する
  • PowerShell、Git Bash を管理者権限で起動しておいて、cmdコマンドを使ってコマンドプロンプトを起動する
  • ユーザ権限で起動しているPowerShell やGit Bashから、別ウィンドウで管理者権限でコマンドプロンプトを起動する

の3つの方法で、コマンドプロンプトを管理者権限で起動する必要があります。それぞれの例を紹介します。

コマンドプロンプトを管理者権限で起動する

何のひねりもないですね。スタートメニューの「Windowsシステムツール → コマンドプロンプト」を右クリックして、「その他 → 管理者として実行」をクリックして、起動するだけです。

PowerShell、Git Bash を管理者権限で起動しておいて、cmdコマンドを使ってコマンドプロンプトを起動する

PowerShell、Git Bash を管理者権限で起動しておけば、cmd を入力してコマンドプロンプトを起動しても管理者権限が維持されるので、mklink コマンドを実行できます。

Git Bashの例を挙げます。コマンドプロンプトと同様に、Git Bashをスタートメニューから、「Git → Git Bash」を右クリックして、「その他→管理者として実行」をクリックして起動します。

test_org というフォルダへのシンポリックリンクを作ってみます。

まず、cmd でコマンドプロンプトを起動します。

そのまま、 mklink /d リンク名 元フォルダ と入力して、フォルダへのシンボリックリンクを作成します。下リストでは、test_org フォルダへのシンボリックリンクを、test_link1 という名前で作成しています。

表示が文字化けしていますね。これはGit Bashでウィンドウズコマンドを実行すると文字化けするという問題で、記事「Git Bashでコマンドプロンプトのコマンド実行すると文字化けするのを解消する方法」で紹介した方法で解消できます。

解消した後、もう一回、実行してみると、下リストのようにエラーなく作成できています。

下リストのように、ちゃんとシンボリックリンクが作成されています。

ユーザ権限で起動しているPowerShell やGit Bashから、別ウィンドウで管理者権限でコマンドプロンプトを起動する

powershell のstart-process コマンドで、別ウィンドウでコマンドを実行することができます。

また、 -verb runasを付けることにより、管理者権限で実行することができます。下リストでは、cmd コマンドを管理者権限で起動してます。

でも、これで起動してもカレントフォルダが引き継がれるわけでもないので、方法1のスタートメニューからコマンドプロンプトを起動するのとあまり変わらないです。

まとめ

PowerShellやGit Bash からは、コマンドプロンプトの内蔵コマンドである mklink を実行することはできません。

また、mklinkコマンドでのシンボリックリンク作成には、管理者権限が必要です。

一番楽なmklinkの実行方法は、mklinkコマンドが必要になったら、スタートメニューからコマンドプロンプトを右クリックして、管理者権限で起動することです。

この記事が気に入ったら
いいね ! しよう