2014年5月7日 星期三

用VBscript取得每一層資料夾底下的儲存容量

檔案:CheckSpaceUsed.vbs
內容:
' 指定所有變數必須事先宣告才能使用
Option Explicit

'WScript.Echo("作業開始執行:" & Date & " " & Time)

' 宣告變數
Dim FSO, chkFolder, vbcrlf, logf

' == 開始 ==
vbcrlf = chrB(13) & chrB(10)

' 檔案所在之目錄
chkFolder = "C:\FTPROOT\UPLOAD"

' 建立檔案系統物件(File System Object)
Set FSO = CreateObject("Scripting.FileSystemObject")
' 建立紀錄檔案
Set logf = FSO.CreateTextFile("Csize.csv", True)

' 取得目錄層所有的資料夾,目錄層下的檔案不處理
FatchFolder FSO.GetFolder(chkFolder)

'關閉記錄檔
logf.Close

'取得清單子程序
Sub FatchFolder(path1)
 Dim fid, xsize, bs, axx
 '找出主資料夾下的資料夾清單
 For Each fid In path1.SubFolders
  bs = "B"
  ' 呼叫統計檔案大小的子程序
  xsize = CalFilesInFolder(fid)

  axx = fid.name & "," & Cstr(xsize)
  
  '計算 BYTE單位(最多到MB即可)
  If(xsize > 1024)then
   xsize = CLng(xsize / 1024)
   bs = "KB"
  End If
  If(xsize > 1024)then
   xsize = CLng(xsize / 1024)
   bs = "MB"
  End If
   
  '寫入紀錄檔
  logf.WriteLine(axx & "," & xsize & bs)
  
  '顯示在console畫面 
  WScript.Echo fid.name & " = " & xsize & bs
 
 Next
End Sub

' 統計檔案的子程序
Function CalFilesInFolder(folder)
 ' 宣告變數
 Dim file, subFolder,fsize,tfsize,dsize
 
 tfsize = 0
 dsize = 0
 ' 找出目前所在目錄內所有的檔案,並加總其大小
 For Each file In folder.Files
  fsize = file.Size
  tfsize = tfsize + fsize
 Next

 ' 如果遇到子目錄,也要進去檢查並計算
 For Each subFolder in folder.SubFolders
  dsize = dsize + CalFilesInFolder(subFolder)
 Next
 '合計本路徑下檔案大小與子資料夾內的大小並回傳
 CalFilesInFolder = tfsize + dsize
End Function

' == 結束 ==
'WScript.Echo("作業執行完畢:" & Date & " " & Time)

這是用來統計FTP使用者代號下每個人使用的空間,雖然都有劃分空間使用限制,但是可以用一個簡單程序稍微計算一下還是比較方便的,這個程序就使用VBS寫好,放在系統排程下每周執行一次,可以產生Csize.csv,然後用EXCEL來檢視,方便多了。

0 個回應: