首页 > 编程 > VBScript > 正文

vbs 列出该目录下所有文件和文件夹的类型,大小,和所有者

2020-06-26 18:20:28
字体:
来源:转载
供稿:网友
这是我在菊花论坛脚本版块看到的,真的很不错,一共有四个部份,把代码复制到记事本另存为GetOwner.VBS文件,
 
GetOwner.VBS用法,在命令行下:GetOwner.vbs 目录名会在相应目录下生成一个TXT.TXT文件,内里列出该目录下所有文件和文件夹的类型,大小,和所有者 
注意:大小以MB为单位,小于1MB的就显示为0MB, 

以下是代码: 

G = WScript.arguments(0) 
Set oFSO = CreateObject("Scripting.FileSystemObject") 
set txt = oFSO.CreateTextFile(G&"TXT.txt",true) '嘿嘿,如果这个目录下刚好有一个TXT.txt文件,那就算你倒霉,
不会有人真用这种名字来做文件名吧?真的啊,真的有啊?那你 
换地方吧~~~C: /TXT.TXT应该不会有了吧? 
set objWMI = GetObject("winmgmts:") 
Set oFiles = objWMI.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'}" & "where ResultClass = 
CIM_logicalfile") 
For Each oFile In oFiles 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( oFile.name) 
txt.WriteLine( "Type: " & oFile.FileType) 
if oFile.name = G&"system volume information" then 
exit for 
end if 
if oFile.FileType="File Folder" then 
Set objFolder = oFSO.GetFolder(oFile.name) 
txt.WriteLine("Size: " & Cint(objFolder.Size/1024/1024) &"MB") 
else 
txt.WriteLine( "Size: " & cint(oFile.FileSize/1024/1024) &"MB") 
end if 
strFile = oFile.name 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!//" & strComputer & 
"/root/cimv2") 
Set colItems = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile 
& "'}" & " WHERE 
AssocClass=Win32_LogicalFileOwner ResultRole=Owner") 
For Each objItem in colItems 
if oFile.name = "system volume information" then 
exit for 
end if 
txt.WriteLine( "FileOwner: " & objItem.AccountName) 
Next 
Next 

统计某用户在某目录下的文件和文件夹使用方法: 
脚本名 目录名 用户名 
如: 
owner.vbs d:/ lsj 
结果是在相应目录下生成一个文本文件 
格式如下: 
-------------------------------------------------------------- 
d:/jcb-gx 
Type: File Folder 
Size: 22MB 
-------------------------------------------------------------- 
d:/powerword 2003.rar 
Type: WinRAR 档案文件 
Size: 503MB 
-------------------------------------------------------------- 
d:/txt.txt 
Type: Text Document 
Size: 0MB 
-------------------------------------------------------------- 
d:/年 度 考 核 登 记 表2006版061225.doc 
Type: Microsoft Word 文档 
Size: 0MB 
-------------------------------------------------------------- 
-------------------------------------------------------------- 
-------------------------------------------------------------- 
The TotalSize of All files lsj owns is: 525MB 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
以下为脚本代码: 

TotalSize = 0 
G = WScript.arguments(0) 
H = WScript.arguments(1) 
Set oFSO = CreateObject("Scripting.FileSystemObject") 
set txt = oFSO.CreateTextFile(G&"TXT.txt",true) 
set objWMI = GetObject("winmgmts:") 
Set oFiles = objWMI.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'}" & "where ResultClass = 
CIM_logicalfile") 
For Each oFile In oFiles 
strFile = oFile.name 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!//./root/cimv2") 
Set colItems = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile 
& "'}" & " WHERE 
AssocClass=Win32_LogicalFileOwner ResultRole=Owner") 
For Each objItem in colItems 
if objItem.AccountName = H then 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( oFile.name) 
txt.WriteLine( "Type: " & oFile.FileType) 
if oFile.name = G&"system volume information" then 
exit for 
end if 
S = 0 
if oFile.FileType="File Folder" then 
Set objFolder = oFSO.GetFolder(oFile.name) 
S= Cint(objFolder.Size/1024/1024) 
else 
S= Cint(oFile.FileSize/1024/1024) 
end if 
txt.WriteLine( "Size: " & S &"MB") 
TotalSize = TotalSize + S 
end if 
Next 
Next 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( "The TotalSize of All files "&H&" owns is: " & TotalSize &"MB") 

更新后: 
4.0版 
使用方法: 
脚本名 目录名 
脚本会在相应目录下生成几个与本机用户对应的TXT文件,每个文件列出相应用户所有文件和文件夹的类型大小,并在最 
后合总计算所有文件和文件夹的大小 
以下是代码: 

TotalSize = 0 
G = WScript.arguments(0) 


Set oFSO = CreateObject("Scripting.FileSystemObject") 

Set objWMI = GetObject("winmgmts:") 
Set oFiles = objWMI.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'}" & "where ResultClass = 
CIM_logicalfile") 

Set objNetwork = CreateObject("Wscript.Network") 
strComputer = objNetwork.ComputerName 
Set colAccounts = GetObject("WinNT://" & strComputer & "") 
colAccounts.Filter = Array("user") 


For Each objUser In colAccounts 
H = objUser.Name 
A = G & objUser.Name & "txt.txt" 
Set txt = oFSO.CreateTextFile (A,true) 

For Each oFile In oFiles 
strFile = oFile.name 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!//./root/cimv2") 
Set colItems = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile 
& "'}" & " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner") 

For Each objItem in colItems 
if objItem.AccountName = H then 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( oFile.name) 
txt.WriteLine( "Type: " & oFile.FileType) 

if oFile.name = G&"system volume information" then 
exit for 
end if 

S = 0 

if oFile.FileType="File Folder" then 
Set objFolder = oFSO.GetFolder(oFile.name) 
S= Cint(objFolder.Size/1024/1024) 
else 
S= Cint(oFile.FileSize/1024/1024) 
end if 
txt.WriteLine( "Size: " & S &"MB") 
TotalSize = TotalSize + S 
end if 
Next 

Next 

txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( "--------------------------------------------------------------") 
txt.WriteLine( "The TotalSize of All files "&H&" owns is: " & TotalSize &"MB") 
Next 

再次更新后: 
4.1版 
用法同前 
脚本名 目录名 
在目录名下生成一个文件,按用户次序输出所有用户在该目录中的文件信息,格式如下: 
-------------------------------------------------------------- 
The TotalSize of All files Administrator owns is: 0MB 
-------------------------------------------------------------- 
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 
-------------------------------------------------------------- 
The TotalSize of All files Guest owns is: 0MB 
-------------------------------------------------------------- 
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 
-------------------------------------------------------------- 
The TotalSize of All files HelpAssistant owns is: 0MB 
-------------------------------------------------------------- 
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 
-------------------------------------------------------------- 
d:/powerword 2003.rar 
Type: WinRAR 档案文件 
Size: 503MB 
-------------------------------------------------------------- 
d:/年 度 考 核 登 记 表2006版061225.doc 
Type: Microsoft Word 文档 
Size: 0MB 
-------------------------------------------------------------- 
d:/jcb-gx 
Type: File Folder 
Size: 22MB 
-------------------------------------------------------------- 
The TotalSize of All files lsj owns is: 525MB 
-------------------------------------------------------------- 
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 
-------------------------------------------------------------- 
The TotalSize of All files SUPPORT_388945a0 owns is: 0MB 
-------------------------------------------------------------- 
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 

以下是代码: 

G = WScript.arguments(0) 


Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set objWMI = GetObject("winmgmts:") 
Set oFiles = objWMI.ExecQuery("ASSOCIATORS OF {Win32_Directory.Name='"&G&"'}" & "where ResultClass = 
CIM_logicalfile") 

Set objNetwork = CreateObject("Wscript.Network") 
strComputer = objNetwork.ComputerName 
Set colAccounts = GetObject("WinNT://" & strComputer & "") 
colAccounts.Filter = Array("user") 


For Each objUser In colAccounts 
TotalSize = 0 
H = objUser.Name 
Set TXT = oFSO.OpenTextFile(G&"/TXT.TXT",8,true) 

For Each oFile In oFiles 
strFile = oFile.name 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!//./root/cimv2") 
Set colItems = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & strFile 
& "'}" & " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner") 

For Each objItem in colItems 
if objItem.AccountName = H then 
TXT.WriteLine( "--------------------------------------------------------------") 
TXT.WriteLine( oFile.name) 
TXT.WriteLine( "Type: " & oFile.FileType) 

if oFile.name = G&"system volume information" then 
exit for 
end if 

S = 0 

if oFile.FileType="File Folder" then 
Set objFolder = oFSO.GetFolder(oFile.name) 
S= Cint(objFolder.Size/1024/1024) 
else 
S= Cint(oFile.FileSize/1024/1024) 
end if 
TXT.WriteLine( "Size: " & S &"MB") 
TotalSize = TotalSize + S 
end if 
Next 
Next 

TXT.WriteLine( "--------------------------------------------------------------") 

TXT.WriteLine( "The TotalSize of All files "&H&" owns is: " & TotalSize &"MB") 
TXT.WriteLine( "--------------------------------------------------------------") 
TXT.WriteLine( "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※") 
TXT.Close 
Next 
MsgBox "文件列表信息已成功输出至TXT.TXT文件",64,"OK"
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表