Windows10なのにmklinkがない?

PowerShellからGet-Command mklinkとかやってるのに見つからない。

よく調べたら mklink って内部コマンドじゃないか。

知ってるとは思うけど軽く説明すると、DOSコマンドには2種類ある。1つは外部コマンドで、“○○.exe”とか“○○.com”とかいうファイルとして存在している。もう1つは内部コマンドで、こいつはシェルの内部に実装されている。

コマンドプロンプトもこの伝統を引き継いていて、大抵の外部コマンドは C:\Windows\System32 などにファイルとして存在している。そうして、こういう外部コマンドはPowerShellからも実行できる。一方で、内部コマンドはコマンドプロンプトの方に実装されているので、実行するにはcmdを起動させる必要がある。

cmd /c mklink /?

f:id:nextugi:20170607180730p:plain

その他、assocとかftypeなども内部コマンドだから、PowerShellからは直接使えない。一方で、pauseとかmoreみたいなコマンドはPowerShellの方にも関数として機能が再現されている。

Ubuntuのシェルとか使ってて入力をミスると、「もしかしてこれのことか?」とか「それならこのパッケージに入ってる」とか自動で言ってくるけど、PowerShellにもそんな機能があったらいいよねってふと思った。