玩轉WIN7的MKLINK

轉自:http://www.cnblogs.com/asion/archive/2011/03/10/1979282.htmlphp

引言:

換了新電腦,終於再次使用上啦WIN7 ,通過一個周天天重裝N次系統,終於弄好一個像樣的系統啦。因爲使用rt7lite對WIN7SP1官方整合包進行了適當精簡,因此最終系統的穩定性還得通過一段時間的使用才能知道。其中在安裝的時候,僅僅爲系統盤(C盤)分配了10G的磁盤空間,而裝完後就佔用了8G以上空間,再想裝上工做軟件,就明顯不足了。因而網搜方法對系統進行再度的減肥的時候,發現了WIN7的一個新工具【MKLINK】,可以對系統文件或文件夾進行連接或聯接。這但是個好工具,因此對其功能進行一番試用,如下是過後的小小總結,提供給有須要的朋友。html

基本介紹:

在CMD命令行輸入mklink /?,能得到如下幫助:windows

建立符號連接。緩存

MKLINK [[/D] | [/H] | [/J]] Link Target安全

        /D      建立目錄符號連接。默認爲文件
                符號連接。
        /H      建立硬連接,而不是符號連接。
        /J      建立目錄聯接。
        Link    指定新的符號連接名稱。
        Target  指定新連接引用的路徑
                (相對或絕對)。
工具

在此,我僅僅對建立目錄的連接進行試用,因此如下討論的皆是有關目錄方面的。測試

參數/D 與 /J 的區別:

在幫助裏面,這兩個參數的解釋,一個是「連接」,一個是「聯接」,僅僅一字之差。字面上的解釋或系統層次上的理論解釋,我沒法深究,只好經過實踐來比較二者的區別。spa

使用/d參數命令建立一個連接:.net

mklink /d "Temp.link" "F:\SystemCache\Temp"命令行

文件夾屬性,顯示如圖所示:mklink的符號連接

使用/J參數命令建立一個聯接:

mklink /J "Temp.link" "F:\SystemCache\Temp"

文件夾屬性,顯示如圖所示:

mklink文件夾聯接

其中一眼就能夠看到的區別就是,使用/D參數建立的「連接」,屬性裏面多了一項「快捷方式」選項卡。

同時在CMD命令行裏面DIR顯示目錄的時候,顯示的也是有所區別的,如圖:

JUNCTION和SYMLINKD其中參數/D對應的是<symlinkd>而參數/J對應的是<junction>。網搜的時候,網上有人留意到微軟系統本身使用的都是<junction>,在此繼續留待考證。

表面的區別很是明顯啦,而咱們關注的是在實際操做過程當中,二者又都有啥區別呢?首先咱們對於一個文件夾的操做不外乎「複製,剪切,刪除」,因此依次對兩個文件夾進行測試,結果以下。

【複製】的測試爲:將兩個文件夾同時複製,並在當前文件夾粘帖,最終結果以下:

[By:AsionTang]MKLINK複製測試

  • 使用/D參數的文件夾,成功的在當前文件夾建立了一個testD的副本。
  • 使用/J 參數的文件夾,複製N次,在當前文件夾沒有任何效果,進入源目錄的時候,發現建立的副本都在「源目錄」裏面。

 結論:

不管做爲連接仍是聯接,日常的複製操做都是對"源目錄" 的進行拷貝,而不是複製自身的連接或聯接屬性。要想實現複製自身,而不是所指向的目錄,可使用網上介紹的方法,即在命令行下使用Xcopy 帶/B參數來進行復制。

【剪切】的測試爲:同時剪切兩個文件夾,粘貼到D 盤。效果以下:

  • 使用/D參數的文件夾:沒有任何效果。
  • 使用/J 參數的文件夾:當前盤的「聯接文件夾」被刪除,而卻在D盤建立了一個同名的普通文件夾,文件夾內無文件。

結論:

對於連接後的文件夾,沒法對其進行剪切操做。而聯接的文件夾能夠被移動,可是不知道有啥意義。(此處對聯接後文件夾的測試不是很嚴謹,留待好心的朋友指正)

【刪除】的測試:(從新建立後)對兩個文件夾直接右鍵刪除。

  • 使用/D參數的文件夾:當前連接文件夾被刪除,源目錄不受影響。
  • 使用/J 參數的文件夾:當前聯接文件夾被刪除,源目錄不受影響。

正式使用:

花了大篇幅介紹了兩個參數的區別,或許有點多餘,可是在實際決定要使用哪一個參數建立時,多少有了些直觀的參考。在這裏我我的使用的是/D參數,由於它多了一個「快捷方式」標籤方便「打開文件夾位置」,僅此而已。

一樣網上也有不少關於如何使用MKLINK來轉移win7文件夾位置的文章,你們能夠一塊兒參考:

1. 移動Windows 7/Vista中用戶文件夾的位置

2. Win7/Vista 巧用 mklink.exe 實現系統和用戶文件的分區存放

3. 移動Windows7中winsxs文件夾位置

在這裏一樣須要用到一個小工具:PendMoves.zip,將其解壓放入系統盤的system32,就能在CMD命令行中任意調用了,固然也能夠直接CD進入解壓後的文件夾,再使用也能夠。

  • ㈠:移動系統的TEMP文件夾。

這個文件夾我認爲是比較安全的,至少操做失敗不會形成系統崩潰。

其中系統裏面一共有兩個TEMP變量,一個是用戶臨時變量,一個是系統臨時變量。首先就是按照參考連接3裏面學到的思想,進行文件轉移。使用以下代碼新建連接:

@mklink /d "C:\Users\Administrator\AppData\Local\Temp.link" "F:\SystemCache\Temp"

@mklink /d "C:\Windows\Temp.link" "F:\SystemCache\Temp"

而後就是使用Pendmoves裏面的Movefile工具,在重啓以後重命名或刪除文件夾。

@movefile "C:\Users\Administrator\AppData\Local\Temp" ""
@movefile "C:\Users\Administrator\AppData\Local\Temp.link" "C:\Users\Administrator\AppData\Local\Temp"

@movefile "C:\Windows\Temp" ""
@movefile "C:\Windows\Temp.link" "C:\Windows\Temp"

由於是臨時文件,因此第一句就是直接刪除文件夾,而後再把創建的連接重命名爲Temp便可。

  • ㈡:對用戶AppData文件夾數據進行轉移。

這裏要說明一點就是,我並非將整個Administrator的目錄進行轉移,而是僅僅對裏面的AppData文件夾有針對的轉移。緣由有二,一個是我不須要保存Administrator根目錄下的DAT文件,二個是這個目錄裏面有不少文件夾也是聯接式的文件夾。一旦轉移整個文件夾,從上面的區別中,咱們知道,符號自己將沒法經過普通複製一個副本,這也就可能形成未知的系統問題。因而,我就對AppData目錄下的單個文件夾進行轉移。

一樣,由於AppData目錄下的Local文件夾內也有幾個是聯接式的文件夾,因此再次單獨的將其分類開,分別進行轉移。

第一步:將Local下Microsoft文件夾,LocalLow和Roaming的文件所有複製到目標路徑中;(在此可能須要獲取「管理員權限」,方法請網搜。)

第二步:再執行相應代碼進行轉移

如下是AppData下,沒有特殊文件夾的相應轉移批處理代碼:

@mklink /d "C:\Users\Administrator\AppData\LocalLow.link" "F:\SystemCache\LocalLow"

@movefile "C:\Users\Administrator\AppData\LocalLow" "C:\Users\Administrator\AppData\LocalLowMoved"
@movefile "C:\Users\Administrator\AppData\LocalLow.link" "C:\Users\Administrator\AppData\LocalLow"

@mklink /d "C:\Users\Administrator\AppData\Roaming.link" "F:\SystemCache\Roaming"

@movefile "C:\Users\Administrator\AppData\Roaming" "C:\Users\Administrator\AppData\RoamingMoved"
@movefile "C:\Users\Administrator\AppData\Roaming.link" "C:\Users\Administrator\AppData\Roaming"

如下是AppData目錄下的Local文件夾的轉移代碼,僅僅對Microsoft文件夾轉移。

@mklink /d "C:\Users\Administrator\AppData\Local\Microsoft.link" "F:\SystemCache\Local\Microsoft"

@movefile "C:\Users\Administrator\AppData\Local\Microsoft" "C:\Users\Administrator\AppData\Local\MicrosoftMoved"
@movefile "C:\Users\Administrator\AppData\Local\Microsoft.link" "C:\Users\Administrator\AppData\Local\Microsoft"

  • ㈢:轉移ProgramData目錄下的Microsoft文件夾。

第一步:將Microsoft文件夾的文件所有複製到目標路徑中;(在此可能須要獲取「管理員權限」,方法請網搜。)

第二步:再執行相應代碼進行轉移

@mklink /d "C:\ProgramData\Microsoft.link" "F:\ProgramData\Microsoft"

@movefile "C:\ProgramData\Microsoft" "C:\ProgramData\MicrosoftMoved"
@movefile "C:\ProgramData\Microsoft.link" "C:\ProgramData\Microsoft"

  • ㈣:轉移Program Files文件夾。

我的經驗:在整個轉移此文件夾以後,會使得「雲端」沒法正常捕獲緩存。即,沒法正常完成手動安裝到雲端,可以使用,可是不正常!

因此,這裏提供兩個版本。全部版本的第一步:都是將文件夾內的文件所有複製到目標路徑中。

整個目錄轉移:

@mklink /d "C:\Program Files.link" "D:\Program Files C"

@movefile "C:\Program Files" "C:\Program Files Moved"
@movefile "C:\Program Files.link" "C:\Program Files"

分開轉移:

@mklink /j "C:\Program Files\Common Files" "D:\Program Files C\Common Files"
@mklink /j "C:\Program Files\InstallShield Installation Information" "D:\Program Files C\InstallShield Installation Information"
@mklink /j "C:\Program Files\Internet Explorer" "D:\Program Files C\Internet Explorer"
@mklink /j "C:\Program Files\Reference Assemblies" "D:\Program Files C\Reference Assemblies"
@mklink /j "C:\Program Files\Windows Defender" "D:\Program Files C\Windows Defender"
@mklink /j "C:\Program Files\Windows Journal" "D:\Program Files C\Windows Journal"
@mklink /j "C:\Program Files\Windows Mail" "D:\Program Files C\Windows Mail"
@mklink /j "C:\Program Files\Windows Media Player" "D:\Program Files C\Windows Media Player"
@mklink /j "C:\Program Files\Windows NT" "D:\Program Files C\Windows NT"
@mklink /j "C:\Program Files\Windows Photo Viewer" "D:\Program Files C\Windows Photo Viewer"
@mklink /j "C:\Program Files\Windows Portable Devices" "D:\Program Files C\Windows Portable Devices"

說明:由於這個文件夾裏面的目錄衆多,而且隨着我的安裝的軟件不一樣,數量各不相同,因此通常不推薦轉移此文件夾

額外補充:

一旦使用Movefile建立任務計劃以後,可使用Pendmoves檢查總共建立的任務數。這裏額外補充一個內容就是:當你建立的計劃是錯誤的,好比Movefile使用的路徑有誤,或者你想取消Movefile計劃等等,可使用一下方法:

打開註冊表,查找路徑「HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager」,刪除"PendingFileRenameOperations"的值就能夠了。

如下是官方原理說明:http://technet.microsoft.com/en-us/magazine/2009.06.utilityspotlight.aspx

不過裏面講解的註冊表路徑不許確。

相關文件下載:MKLINK的妙用.zip

相關文章
相關標籤/搜索