vbscript to list contents of directory and subdirectories
thanks
this pretty crappy code modified microsoft example years ago. "/q" option isn't provided, can modify. "/s" assumed.
---- start script
option explicit
dim tabstop
dim newline
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' constants returned drive.drivetype
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
const drivetyperemovable = 1
const drivetypefixed = 2
const drivetypenetwork = 3
const drivetypecdrom = 4
const drivetyperamdisk = 5
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' constants returned file.attributes
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
const fileattrnormal = 0
const fileattrreadonly = 1
const fileattrhidden = 2
const fileattrsystem = 4
const fileattrvolume = 8
const fileattrdirectory = 16
const fileattrarchive = 32
const fileattralias = 64
const fileattrcompressed = 128
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' constants opening files
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
const openfileforreading = 1
const openfileforwriting = 2
const openfileforappending = 8
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' showdrivetype
' purpose:
' generates string describing drive type of given drive object.
' demonstrates following
' - drive.drivetype
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function showdrivetype(drive)
dim s
select case drive.drivetype
case drivetyperemovable
s = "removable"
case drivetypefixed
s = "fixed"
case drivetypenetwork
s = "network"
case drivetypecdrom
s = "cd-rom"
case drivetyperamdisk
s = "ram disk"
case else
s = "unknown"
end select
showdrivetype = s
end function 'showdrivetype
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' showfileattr
' purpose:
' generates string describing attributes of file or folder.
' demonstrates following
' - file.attributes
' - folder.attributes
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function showfileattr(file) ' file can file or folder
dim s
dim attr
attr = file.attributes
if attr = 0 then
showfileattr = "normal"
exit function
end if
if attr , fileattrdirectory s = s & "directory "
if attr , fileattrreadonly s = s & "read-only "
if attr , fileattrhidden s = s & "hidden "
if attr , fileattrsystem s = s & "system "
if attr , fileattrvolume s = s & "volume "
if attr , fileattrarchive s = s & "archive "
if attr , fileattralias s = s & "alias "
if attr , fileattrcompressed s = s & "compressed "
showfileattr = s
end function 'showfileattr
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' generatedriveinformation
' purpose:
' generates string describing current state of
' available drives.
' demonstrates following
' - filesystemobject.drives
' - iterating drives collection
' - drives.count
' - drive.availablespace
' - drive.driveletter
' - drive.drivetype
' - drive.filesystem
' - drive.freespace
' - drive.isready
' - drive.path
' - drive.serialnumber
' - drive.sharename
' - drive.totalsize
' - drive.volumename
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function generatedriveinformation(fso)
dim drives
dim drive
dim s
set drives = fso.drives
s = "number of drives:" & tabstop & drives.count & newline & newline
' construct 1st line of report.
s = s & string(2, tabstop) & "drive"
s = s & string(3, tabstop) & "file"
s = s & tabstop & "total"
s = s & tabstop & "free"
s = s & tabstop & "available"
s = s & tabstop & "serial" & newline
' construct 2nd line of report.
s = s & "letter"
s = s & tabstop & "path"
s = s & tabstop & "type"
s = s & tabstop & "ready?"
s = s & tabstop & "name"
s = s & tabstop & "system"
s = s & tabstop & "space"
s = s & tabstop & "space"
s = s & tabstop & "space"
s = s & tabstop & "number" & newline
' separator line.
s = s & string(105, "-") & newline
each drive in drives
s = s & drive.driveletter
s = s & tabstop & drive.path
s = s & tabstop & showdrivetype(drive)
s = s & tabstop & drive.isready
if drive.isready then
if drivetypenetwork = drive.drivetype then
s = s & tabstop & drive.sharename
else
s = s & tabstop & drive.volumename
end if
s = s & tabstop & drive.filesystem
s = s & tabstop & drive.totalsize
s = s & tabstop & drive.freespace
s = s & tabstop & drive.availablespace
s = s & tabstop & hex(drive.serialnumber)
end if
s = s & newline
next
generatedriveinformation = s
end function 'generatedriveinformation
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' generatefileinformation
' purpose:
' generates string describing current state of file.
' demonstrates following
' - file.path
' - file.name
' - file.type
' - file.datecreated
' - file.datelastaccessed
' - file.datelastmodified
' - file.size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function generatefileinformation(file)
dim s
s = file.datelastmodified & tabstop
s = s & file.size & tabstop
s = s & changesc(file.name) & newline
generatefileinformation = s
end function 'generatefileinformation
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' generatefolderinformation
' purpose:
' generates string describing current state of folder.
' demonstrates following
' - folder.path
' - folder.name
' - folder.datecreated
' - folder.datelastaccessed
' - folder.datelastmodified
' - folder.size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function generatefolderinformation(folder)
dim s
s = folder.datelastmodified & tabstop
s = s & "<dir>" & tabstop
s = s & changesc(folder.name) & newline
generatefolderinformation = s
end function 'generatefolderinformation
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' generateallfolderinformation
' purpose:
' generates string describing current state of a
' folder , files , subfolders.
' demonstrates following
' - folder.path
' - folder.subfolders
' - folders.count
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
function generateallfolderinformation(folder)
dim s
dim subfolders
dim subfolder
dim files
dim file
s = "directory of " & folder.path & newline & newline
set files = folder.files
if files.count <> 0 then
each file in files
s = s & generatefileinformation(file)
next
end if
s = s & tabstop & tabstop & files.count & " file(s)" & newline
set subfolders = folder.subfolders
s = s & tabstop & tabstop & subfolders.count & " dir(s)" & newline
if subfolders.count <> 0 then
each subfolder in subfolders
s = s & generatefolderinformation(subfolder)
next
s = s & newline
each subfolder in subfolders
s = s & generateallfolderinformation(subfolder)
next
end if
generateallfolderinformation = s
end function 'generateallfolderinformation
'********************************************************************
'*
'* function changesc
'*
'* purpose: change special characters common display characters
'*
'* input: strany a string.
'*
'* output: returns string without special characters (vbcr, vblf, etc.)
'*
'********************************************************************
function changesc(strany)
dim strnew, x
x = 1 len(strany)
'check ascii characters.
select case asc(mid(strany, x, 1))
case 0,1,2,3,4,5,6,7,8,9
strnew = strnew & "!"
case 10,11,12,13,14,15,16,17,18,19
strnew = strnew & "@"
case 20,21,22,23,24,25,26,27,28,29
strnew = strnew & "#"
case 30,31
strnew = strnew & "$"
case else
strnew = strnew & mid(strany, x, 1)
end select 'mid(strnew, x, 1)
' 'check unicode characters.
' select case ascw(mid(strany, x, 1))
' case 0,1,2,3,4,5,6,7,8,9
' strnew = strnew & "%"
' case 10,11,12,13,14,15,16,17,18,19
' strnew = strnew & "^"
' case 20,21,22,23,24,25,26,27,28,29
' strnew = strnew & "&"
' case 30,31
' strnew = strnew & "*"
' case else
' strnew = strnew & mid(strany, x, 1)
' end select 'mid(strnew, x, 1)
next 'x
changesc = strnew
end function 'changesc
sub print(x)
wscript.echo x
end sub
sub main
dim fso, testfolder
' set global data.
tabstop = chr(9)
newline = chr(10)
set fso = createobject("scripting.filesystemobject")
set testfolder = fso.getfolder(".")
print generateallfolderinformation(testfolder)
end sub
main
---- end script
Windows Server > Windows Server General Forum
Comments
Post a Comment