嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guy 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:我要如何判斷磁碟機上的可用空間百分比?


我要如何判斷磁碟機上的可用空間百分比?

嗨,Scripting Guy!我知道如何判斷磁碟機上的可用空間量,不過我該如何判斷磁碟機上可用空間的「百分比」?

-- MS

MS,您好。您的想法很正確:判斷磁碟機上的可用磁碟空間是相當容易的。例如,這個簡單的指令碼會告訴您電腦上 C 磁碟機的可用空間數量 (以位元組為單位):
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
For Each objDisk in colDisks
    Wscript.Echo objDisk.FreeSpace
Next

這裡提供您另一個好消息:判斷可用磁碟空間的百分比也幾乎一樣容易。因為只需要一項簡單計算,就能得到可用磁碟空間的百分比:您可以將可用磁碟空間除以磁碟機的全部大小。假設我們擁有一個「非常」小的磁碟機,全部 10 位元組大小的磁碟機具有 2 位元組的可用磁碟空間。如果要判斷可用磁碟空間的百分比,我們可以將 2 除以 10 (可用空間除以全部大小),並取得 .20 的數值。換句話說,在這個極小的磁碟機上還有 20% 的可用空間。

這是相當簡單的方程式,而且我們已經擁有其中的一半:Win32_LogicalDisk 類別的 FreeSpace 屬性告訴我們可用空間的數量。而且雖然您可能並不瞭解,我們也已經擁有方程式的另一半:相同類別的 Size 屬性會告訴我們磁碟機的大小。我們只需要在指令碼中用 FreeSpace 除以 Size,就會得到需要的百分比:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
For Each objDisk in colDisks
    intFreeSpace = objDisk.FreeSpace
    intTotalSpace = objDisk.Size
    pctFreeSpace = intFreeSpace / intTotalSpace
    Wscript.Echo pctFreeSpace 
Next

很漂亮吧?這個指令碼唯一的問題,就是它會回報像 0.22457268101427 這樣的十進位數字。是的,技術上來說這的確是精確數值,不過這種答案看來實在不像百分比。因此讓我們使用 VBScript 的 FormatPercent 函數來取得像 22.45% 這樣的數值:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk Where DeviceID = 'C:'")
For Each objDisk in colDisks
    intFreeSpace = objDisk.FreeSpace
    intTotalSpace = objDisk.Size
    pctFreeSpace = intFreeSpace / intTotalSpace
    Wscript.Echo FormatPercent(pctFreeSpace)
Next

這樣就好多了。

純粹只為有趣,在此提供另一種變化:依預設值,Win32_LogicalDisk 類別會查看您電腦上的「所有」磁碟機,包括軟碟機、卸除式 Zip 磁碟機等等。如果只要取回硬碟機上的可用空間資訊,請修改您的 WQL Query,以便讓查詢選取 DriveType 為 3 (這在 WMI 的世界中,代表一部硬碟機) 的所有磁碟機。換句話說:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk Where DriveType = 3")
For Each objDisk in colDisks
    intFreeSpace = objDisk.FreeSpace
    intTotalSpace = objDisk.Size
    pctFreeSpace = intFreeSpace / intTotalSpace
    Wscript.Echo objDisk.DeviceID, FormatPercent(pctFreeSpace)
Next

如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首