固定 Dataram RAMDisk 的磁碟代號 – 附示範程式

[Note: We have an English version for this post. Please read here]

背景

自從我編寫了一篇如何避免使用映像檔也可以固定 Dataram RAMDisk 磁碟代號的文章之後,就收到許多讀者的查詢。當中許多涉及執行上的細節,但由於該篇文章並沒有提供一個可直接執行的示例程式,故此在回應讀者的查詢時難免出現描述上的困難。現在,我再撰寫此文及提供一個可以直接執行的示例程式,希望能方便讀者使用和研究。

這篇文章並不是要取代之前所撰寫的文章,而是作為實作的補充。如你對示例程式的原理和解說有興趣,我強烈建議您去閱讀之前撰寫的文章

在本文中,我提供了兩個示例程式:

  1. StartUp.bat:在電腦啟動時,將 RAMDisk 的磁碟代號進行修正,並將一些常用程式自動載入 RAMDisk 中,以及將這些瀏覽器的 Cache 和下載文件設定在 RAMDisk 中,從而達致最佳的瀏覽器速度。
  2. ShutDown.bat:在電腦關機時,將 RAMDisk 的瀏覽器設定檔案及已下載的文件複製到硬碟機中,以免關機後失去這些設定和文件。

這兩個程式是按照我自己的電腦設定來運作的,故此如果你要在你的電腦中使用這些程式,你必須根據以下條件來設定你的電腦。當然你也可以直接修改程式碼去符合你的電腦設定,但前提是你必須了解這些程式碼的運作原理。(詳見此文

電腦設定

請確保你的電腦符合以下設定/假設:

  1. RAMDisk 的磁碟標籤(Disk label)必須是 “RAMDISK” (全部大寫)。設定步驟見原文第 2 步。
  2. RAMDisk 的磁碟代號將會固定為 R: .
  3. 電腦開機後,我們希望電腦能夠自動將  C:\MyRAMDiskFiles 資料夾中的檔案複製到 RAMDisk之中。這個資料夾主要是放置一些常用程式,使他們能夠直接在 RAMDisk 上執行,加快速度。舉個例子,我希望將 Firefox 放在 RAMDisk 上執行,那麼我就先將 Firefox 的程式檔案放在 C:\MyRAMDiskFiles\Programs\Firefox\,那麼當 StartUp.bat 執行後,便可以直接點擊 R:\Programs\Firefox\Firefox.exe 去執行 Firefox 了。
  4. 我的 Google Chrome 安裝在 C:\Program Files,我希望 Chrome 將瀏覽互聯網時產生的暫存檔 (Cache)儲存在 RAMDisk 中,但是由於 Chrome 的暫存檔是放在 Chrome 的安裝目錄下,所以 StartUp.bat 會將該暫存檔目錄轉化為一個虛擬連接,直接連接到 R:\TEMP\BrowserCache 目錄中。如此一來,所有儲存到暫存檔目錄的檔案都會被實際儲存在 RAMDisk 之中,減少硬碟讀寫,並且會在關機時自動清除這些暫存檔。
  5. 在使用電腦的過程中, RAMDisk 上的程式設定可能會被修改(例如 Firefox 插件更新),我希望這些設定在關機後仍能夠保留。所以,在電腦關機前,ShutDown.bat 會將這些程式檔案複寫到硬碟 C:\MyRAMDiskFiles 
  6. 此外,所有從互聯網上下載的檔案,都會被儲存到 RAMDisk 之中 (R:\Download), 並且在電腦關機時,將這些檔案複製到硬碟  C:\Download 資料夾中。

開始

第 1 步

用記事本建立兩個程式檔案: StartUp.bat 和 ShutDown.bat, 並儲存在 C:\ (或其他你喜歡的資料夾中,在之後的步驟中你需要指定這些程式檔案的位置。)

注意!!我們的程式碼是以 DOS Batch Script 形式編寫, “斷行”(line-break) 在此 DOS Batch Script 中有特定意義,故千萬不要隨便在程式碼中增加“斷行”。如果你使用“複製-貼上”的方式從本文建立程式碼,我們建議你小心檢查一下有沒有額外的“斷行”被加插入去。為避免麻煩,我們建議你直接下載這些程式碼:  RAMDisk fix drive letter - sample scripts

此外,你必須將程式碼中的 [Your-Windows-user-name] 修改為你的 Windows 用戶名稱。

程式 1: C:\StartUp.bat

@echo off

@rem assign the key variables, see assumption #1 & #2
SET _label=RAMDISK
SET _ramdrive=R:

@rem Find the drive letter which has volume name set as RAMDISK, and mount it to _ramdrive
FOR /F "skip=1 tokens=1 delims=: " %%a IN ('wmic logicaldisk where "VOLUMENAME='%_label%'" GET CAPTION') DO (
	subst %_ramdrive% %%a:\
)

@rem initialize the ramdisk - automatically copy the files in C:\MyRamDriveFiles to the ramdisk after the Windows starts. see assumption #3
mkdir %_ramdrive%\Programs
xcopy C:\MyRamDriveFiles\*.* %_ramdrive%\Programs\ /E/Q/Y/R

@rem link the google chrome cache folder to ramdisk. Remeber to replace [Your-Windows-user-name] with your own, see assumption #4
mkdir %_ramdrive%\TEMP\BrowserCache
mklink /j "C:\Users\[Your-Windows-user-name]\AppData\Local\Google\Chrome\User Data\Default\Cache" "%_ramdrive%\TEMP\BrowserCache"

@rem create a dir in ramdisk to stores the downloaded files, you will need to set up Firefox to store downloaded files in R:\Download, see assumption #6
mkdir %_ramdrive%\Download

@echo on

程式 2: C:\ShutDown.bat

@echo off

@rem see assumption #2
SET _ramdrive=R:

@rem copy all program files back to harddisk -  see assumption #5
xcopy %_ramdrive%\Programs\*.* C:\MyRamDriveFiles\ /Q/Y/R/S/D/C

@rem copy all downloaded files back to harddisk  -  see assumption #6
mkdir C:\Download
xcopy %RAMDISK%\Download\*.* C:\Download\ /S/D/Q/R/C

rem disconnect the google chrome cache folder linking -  see assumption #4
rmdir "C:\Users[Your-Windows-user-name]\AppData\Local\Google\Chrome\User Data\Default\Cache"

rem delete the drive mounting
subst %RAMDISK% /D

echo on

第 2 步

參照此文並執行該文的步驟3.

第 3 步

現在我們已經利用本機群組原則編輯器(Group Policy Editor)在 StartUp.bat 加入了“啟動” (Startup)項目中,請重複該文的步驟 3.2, 將 ShutDown.bat 加入到 “關機” (Shutdown) 項目中。

至此,我們應該在 “啟動”(Startup)中已經有 “C:\StartUp.bat”, 而在 “關機”(Shutdown)中則有”C:\ShutDown.bat” 項目.

Startup script

第 4 部

請確保你的電腦符合上述的“電腦設定”的要求,特別檢查一下你的電腦中已經建立了 “C:\MyRAMDiskFiles” 和 “C:\Download” 資料夾。一切妥當後,請重啟電腦即可。

Leave a Reply

Your email address will not be published. Required fields are marked *