-
Notifications
You must be signed in to change notification settings - Fork 0
/
scanFolder.vbs
168 lines (139 loc) · 5.1 KB
/
scanFolder.vbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
' VBS script to enumerate folder and files and extract data
' @author: David Gloyn-Cox
' Operation: set the folders to scan in the Line 21 - 22, remember to update tthe array length
' Run the script, output a file called filelist.csv
on error resume next
' global objects - gah
Dim objFSO, stdOut, stdErr
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set stdOut = objFSO.GetStandardStream (1)
Set stdErr = objFSO.GetStandardStream (2)
Dim objFolder
Dim idx
idx = CLng(0)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
' SET THE LIST OF FOLDER TO SCAN HERE
' change the number (n-1) to reflect the number of base folders to scan recursively
Dim varFolders(1) ' n-1, if 'n' folders the length is (n-1)
varFolders(0) = "O:\"
varFolders(1) = "P:\"
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' what fields to export to CSV file
Dim arrFieldFolder(3)
Dim arrFieldFile(5)
arrFieldFolder(0) = "Path"
arrFieldFolder(1) = "Name"
arrFieldFolder(2) = "Type"
arrFieldFolder(3) = "Created"
arrFieldFile(0) = "Name"
arrFieldFile(1) = "Size"
arrFieldFile(2) = "Created"
arrFieldFile(3) = "Modified"
arrFieldFile(4) = "Type"
arrFieldFile(5) = "Ext"
Dim OUTPUT_FILE
OUTPUT_FILE = "filelist.csv"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' init the csv file
initCSVFile OUTPUT_FILE
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' launch and load the script
for each strFolder in varFolders
Set objFolder = objFSO.GetFolder(strFolder)
if Not objFolder is Nothing then
scanFiles (objFolder)
else
stdOut.writeLine strFolder + " could not be found!"
end if
next
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Scan the specified folder for folders and files
Sub scanFiles(objFolder)
Dim objFolderDict, objFile
' outpuit location...
Set objFolderDict = getSysDataFolder(objFolder)
' walk the child folders
for each objSubFolder in objFolder.SubFolders
scanFiles (objSubFolder)
next
' enumerate the files
Set objFiiles = objFolder.files
for each objFile in objFiiles
' get the file details
Set objFileDict = getSysDataFile(objFile)
' dump the row out
writeCSVRow OUTPUT_FILE, objFolderDict, objFileDict
next
end Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' returns the folders properties
Function getSysDataFolder(objFolder)
Dim objDict
Set objDict = CreateObject("Scripting.Dictionary")
' add the folder detaisl to this doct
objDict.add "Path", objFolder.Path
objDict.add "Name", objFolder.Name
objDict.add "Attributes", objFolder.Attributes
objDict.add "Created", objFolder.DateCreated
objDict.add "Modified", objFolder.DateLastModified
objDict.add "Drive", objFolder.Drive
objDict.add "ShortName", objFolder.ShortName
objDict.add "ShortPath", objFolder.ShortPath
objDict.add "Type", objFolder.Type
' return the object
Set getSysDataFolder = objDict
end Function
' returns the files properties
Function getSysDataFile(objFile)
Dim objDict
Set objDict = CreateObject("Scripting.Dictionary")
' now to set the dict with the corrent values...
objDict.add "Path", objFile.Path
objDict.add "Name", objFile.Name
objDict.add "Ext", objFSO.getExtensionName(objFile)
objDict.add "Attributes", objFile.Attributes
objDict.add "Created", objFile.DateCreated
objDict.add "Modified", objFile.DateLastModified
objDict.add "Drive", objFile.Drive
objDict.add "ShortName", objFile.ShortName
objDict.add "ShortPath", objFile.ShortPath
objDict.add "Size", objFile.Size
objDict.add "Type", objFile.Type
' return the object
Set getSysDataFile = objDict
end function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' csv tools
sub initCSVFile(filename)
Dim objCSVFile
Set objCSVFile = objFSO.OpenTextFile(filename, 8, True)
objCSVFile.write "idx"
for each strField in arrFieldFolder
objCSVFile.write ",folder_" & strField
next
for each strField in arrFieldFile
objCSVFile.write ",file_" & strField
next
objCSVFile.write vbCrLf
objCSVFile.Close
Set objCSVFile = Nothing
end sub
sub writeCSVRow(filename, ByRef objFolderDict, ByRef objFileDict)
Dim objCSVFile
Set objCSVFile = objFSO.OpenTextFile(filename, 8, True)
idx = idx+1
objCSVFile.write idx
for each strField in arrFieldFolder
objCSVFile.write ",""" & objFolderDict(strField) & """"
next
for each strField in arrFieldFile
objCSVFile.write ",""" & objFILEDict(strField) & """"
next
objCSVFile.write vbCrLf
' close and save
objCSVFile.Close
Set objCSVFile = Nothing
end sub