vbscript to list contents of directory and subdirectories


this should pretty easy.   trying write vbscript same thing dos command dir /s /q.  can directory list doesn't come out same command.  have code this.


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

Popular posts from this blog

Edit Group Policy

Hyper-V VM not reaching OS 'Logon' screen

DNS question...