前兩天看到讀者留言說windows下有個命令mklink可以試試。這個命令我之前的確沒用過,試過之后發現原來windows下也有軟鏈接和硬鏈接之分。Linux 中的軟鏈接使用的比較多,一般當成快捷方式用、特別是比較深的目錄。創建軟鏈接可以方便 cd 到不同目錄,同時也不會造成誤解,軟鏈接在顯示上會高亮比較明顯。刪除軟鏈接也不會造成任何不好的后果,并且是可追溯的,可以查看軟鏈接指向的目錄或文件。硬鏈接一般情況不要使用,因為它無法追溯。你修改了一個硬鏈接的文件內容,同時會影響的所以指向該文件的硬鏈接。相當于一個文件有不同的文件名,但它們都指向同一個文件,并且還很難查看它們直接的關系。沒有一張圖會告訴你哪些文件是相互關聯的。軟鏈接可以隨便用,硬鏈接最好做了登記后再用,不然會造成意外后果。軟鏈接可以用于文件或目錄,硬鏈接只能用于文件不能用于目錄,且無法跨文件系統。Windows 下的軟鏈接和硬鏈接與Linux類似,但大家用的很少。因為圖形界面操作一般使用快捷方式就夠了。但快捷方式實際上是個二進制文件(*.link),它只能被圖形化管理工具讀取。軟連接一般用于命令行或腳本中,快捷方式對命令行環境沒有幫助。Windows 下可以使用 mklnk 命令創建軟鏈接。它的幫助文檔為:C:\Users\Administrator>mklink /?
創建符號鏈接。
MKLINK [[/D] | [/H] | [/J]] Link Target
/D 創建目錄符號鏈接。默認為文件
符號鏈接。
/H 創建硬鏈接而非符號鏈接。
/J 創建目錄聯接。
Link 指定新的符號鏈接名稱。
Target 指定新鏈接引用的路徑
(相對或絕對)。
C:\Users\Administrator>
mklink /d gitrepo d:\gitRepo
在 windows 圖形界面下軟鏈接看起來像一個快捷方式:但在文件上它們屬于不同的文件,快捷方式在文件上是個二進制文件,軟鏈接不是。我創建了一個快捷方式和一個軟鏈接,兩個文件放一起可以比較一下。
?我們使用 /d 和 /h 就行了,/d 可以指向文件和目錄,/h 只能指向文件且限定盤符只有在一個盤才能用和 linux 的規則一致。
/j 在文檔上與 /d 有區別,但實際測試沒有分別,它是 windows 早期版本的一種實現,在 win10的行為 上與 /d 表現一致可以不用記。mklink 創建的軟鏈接在 git-bash 中也能用,但 mklink 只能在 cmd 中使用。原因是 mklink 不是一個可執行文件,使用 where 和 everything 是找不到實體文件的。它和 cmd 中的 cd、type 命令有點像,類似 shell 中的內置函數。推薦使用軟鏈接,盡量不用硬鏈接。軟鏈接基本搞清楚了,那如何在命令行創建快捷方式?DeepSeek 給出了一種實現:$ cat /c/bin/CreateShortcut.vbs
Set ws = WScript.CreateObject("WScript.Shell")
Set sc = ws.CreateShortcut(WScript.Arguments(0))
sc.TargetPath = WScript.Arguments(1)
sc.Save
$ cat /c/bin/myln.bat
cscript //nologo "c:\bin\CreateShortcut.vbs" "%1" "%2"
c:\bin\myln.bat "快捷方式.lnk" d:\gitRepo
閱讀原文:原文鏈接
該文章在 2025/5/9 9:47:33 編輯過