locked
請教查詢硬碟可用空間的vbs問題(已解決) RRS feed

  • 問題

  • 不好意思,請教一下各位先進

    小弟因為在公司有部署軟體的需求,在部署安裝軟體前想先檢測USER端可用的C 槽空間

    在網路上找到一個vbs的寫法可以查詢目前C 槽可用的硬碟空間

    但因為對vbs不熟,不知道怎麼改成會自動判斷可用的硬碟空間是否大於自己想要的空間

    例如判斷目前的C 槽可用空間小於5GB,我就不做部署安裝,若大於 5GB就可以進行部署

    目前下面的VBS只能查詢C 槽可用空間並轉成GB單位並寫到 C:\temp\C_FreeSpace.txt

    但我現在的需求是想改成判斷可用空間大於5GB就執行C:\temp\deploy.exe

    若可用空間小於5GB就不動作結束VBS,請問有VBS的高手可以協助教學一下嗎?謝謝!!

    VBS內容如下:

    strComputer = "."
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = fso.OpenTextFile("C:\temp\C_FreeSpace.txt",2,True)
    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
        ProceeSpace1 = objDisk.FreeSpace / 1024
        ProceeSpace2 = ProceeSpace1 / 1024
        ProceeSpace3 = ProceeSpace2 / 1024
        objTextFile.Writeline("C: 可用剩餘空間為:" & FormatNumber(ProceeSpace3,2) & " GB")
    Next


    • 已編輯 syman888 2017年2月21日 上午 01:30
    2017年2月18日 上午 07:41

解答

  • 你好, 你是要在windows shell執行指令吧? 那我就給你shell script 

    FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
        SET FREESPACE=%%s
    )
    ECHO FREESPACE is %FREESPACE%

    IF %FREESPACE% gtr "5120000000" @ECHO Enough_Space

    首4行是要得到C: 的閒置空間放到 %FREESPACE%, 之後用一個IF比較式去控制要不要做往後的事


    邊幫助, 邊鍛鍊

    • 已標示為解答 syman888 2017年2月20日 上午 05:21
    2017年2月20日 上午 02:32

所有回覆

  • 你好, 你是要在windows shell執行指令吧? 那我就給你shell script 

    FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
        SET FREESPACE=%%s
    )
    ECHO FREESPACE is %FREESPACE%

    IF %FREESPACE% gtr "5120000000" @ECHO Enough_Space

    首4行是要得到C: 的閒置空間放到 %FREESPACE%, 之後用一個IF比較式去控制要不要做往後的事


    邊幫助, 邊鍛鍊

    • 已標示為解答 syman888 2017年2月20日 上午 05:21
    2017年2月20日 上午 02:32
  • 感謝您的指教~

    在使用gtr上一直覺得怪怪的,無法正常判斷是否有大於我要的可用空間

    後來才發現是下面的原因,看來又要再找其他方法了,謝謝您

    CMD 運算是 32 位元有符號(正負)運算,
    所以不能超過 2147483647,
    (也就是不能超過 4GB, 2 的 32 次方).

    ------------------------------------------------------------------------------

    在另一個討論區有位大哥已協助回覆解法,分享給大家喔!

    https://www.blueshop.com.tw/board/FUM20041006152616ZC6/BRD201702182205048PZ.html

    -----------------------------------------

    strComputer = "."
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oShell = WScript.CreateObject ("WScript.Shell")
    Set objTextFile = fso.OpenTextFile("C:\temp\C_FreeSpace.txt",2,True)
    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
    ProceeSpace1 = objDisk.FreeSpace / 1024
    ProceeSpace2 = ProceeSpace1 / 1024
    ProceeSpace3 = ProceeSpace2 / 1024
    objTextFile.Writeline("C: 可用剩餘空間為:" & FormatNumber(ProceeSpace3,2) & " GB")
    if FormatNumber(ProceeSpace3,2) > 5 then
    	msgbox "big 5g"
    	oShell.run "cmd.exe /C copy ""S:\Claims\Sound.wav"" ""C:\WINDOWS\Media\Sound.wav""" 
    else
    	msgbox "small or equal 5g"
    end if
    Next	

    --------------------------------------------------

    • 已編輯 syman888 2017年2月21日 上午 01:33
    2017年2月20日 上午 05:08