Function CdRomDrives
' Returns array of all local CD-ROM drives
Dim drive, aTmp(), i
i = -1
For Each drive In CreateObject("Scripting.FileSystemObject").Drives
If drive.DriveType = 4 Then
i = i + 1
ReDim Preserve aTmp(i)
aTmp(i) = drive.DriveLetter
End If
Next
CdRomDrives = aTmp
End Function
Function DeleteIfEmpty(sFldr)
' Deletes a folder IF there is nothing in it
Dim FSO, Flder, HasFiles, HasFlders
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Fldr = FSO.GetFolder(sFldr)
HasFiles = CBool(Fldr.Files.Count)
HasFlders = CBool(Fldr.SubFolders.Count)
If ( (HasFiles = False) And (HasFlders = False) ) Then
FSO.DeleteFolder sFldr
End If
End Function
Function DriveType(drvpath)
' Modified from WSH 5.6 Docs
' drivepath should be in form "x","x:", or "x:\"
' Returns human-readable drive type
Dim fso, d, t
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive(drvpath)
Select Case d.DriveType
Case 0: ShowDriveType = "Unknown"
Case 1: ShowDriveType = "Removable"
Case 2: ShowDriveType = "Fixed"
Case 3: ShowDriveType = "Network"
Case 4: ShowDriveType = "CD-ROM"
Case 5: ShowDriveType = "RAM Disk"
End Select
End Function
Sub fAppend(FilePath, sData)
'Given the path to a file, will append sData to it
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(FilePath, 8)
.Write sData: .Close
End With
End Sub
Function FileAge(sPath)
' Returns file age in days
With CreateObject("Scripting.FileSystemObject")._
GetFile(sPath)
FileAge = CDbl(Now) - CDbl(.DateLastModified)
End With
End Function
Function FolderSet(FolPath)
' finds all folders in path FolPath
' WARNING - UNCOMMENT NEXT TWO LINES IF
' FSO NOT DECLARED IN MAIN BODY
' Dim FSO
' Set FSO = CreateObject("Scripting.FileSystemObject")
Dim Fol, strTemp, aFols(), oFolder, subFolder, aTmp, i
ReDim aFols(-1)
Set oFolder = FSO.GetFolder(FolPath)
For Each Fol In oFolder.SubFolders
ReDim Preserve aFols(UBound(aFols) + 1)
aFols(UBound(aFols)) = Fol.Path
Next
'Recurse through all of the folders
For Each subFolder In oFolder.subFolders
aTmp = FolderSet(subFolder)
For i = 0 To UBound(aTmp)
ReDim Preserve aFols(UBound(aFols) + 1)
aFols(UBound(aFols)) = aTmp(i)
i = i + 1
Next
Next
FolderSet = aFols
End Function
Function FolderSize(folspec)
FolderSize = CreateObject( _
"Scripting.FileSystemObject")._
GetFolder(folspec).size
End Function
Function folIsEmpty(sFldr)
folIsEmpty = CStr(CBool(CreateObject(_
"Scripting.FileSystemObject")._
GetFolder(sFldr).Files.Count))
End Function
Function fRead(FilePath)
'Given the path to a file, will return entire contents
' works with either ANSI or Unicode
Const ForReading = 1, TristateUseDefault = -2, _
DoNotCreateFile = False
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(FilePath, ForReading, _
False, TristateUseDefault)
fRead = .ReadAll: .Close
End With
End Function
Function FreeDrive(sFirst,sLast)
'Finds first available drive letter in a sequence
' specify like this: fDrive = FreeDrive("C","Z")
' WARNING: recommended uses is to start with C
' since some systems will not correctly handle
' A or B used for mapping.
Dim I
With CreateObject("Scripting.FileSystemObject")
For I = Asc(sFirst) To Asc(sLast)
If Not .DriveExists(Chr(I)) Then
Freedrive = Chr(I) & ":"
Exit Function
End If
Next
End With
End Function
Sub fWrite(FilePath, sData)
'writes sData to FilePath
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(FilePath, 2, True)
.Write sData: .Close
End With
End Sub
Function GetRemovableDrive
Dim drive
for each drive in CreateObject("Scripting.FileSystemObject").Drives
if drive.DriveType = 1 Then
GetRemovableDrive = drive.DriveLetter + ":\"
exit function
end if
next
end function
Function HasRights(folderspec)
' Returns true if user has at least list rights
' to path; can be a disk or UNC path
On Error Resume Next
Dim fso, f, fc, f1
HasRights = CStr(False)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 In fc
If Err.Number <> 0 Then Exit For
HasRights = CStr(True)
Exit Function
Next
Err.Clear
On Error GoTo 0
End Function
Function Head(fil, nlines)
'Given the path to a file, will return
' count nlines # of lines
' lines will be separated with vbCrLF if more than
' one is specified
' works with either ANSI or Unicode
Const ForReading = 1, TristateUseDefault = -2, _
DoNotCreateFile = False
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(fil, ForReading, _
False, TristateUseDefault)
For i = 1 To nlines
If Not .AtEndOfStream Then
Head = Head & .ReadLine
If i < nlines Then Head = Head & vbCrLf
Else Exit For
End If
Next
.Close
End With
End Function
Sub HideFolder(strFolder)
'Hides a folder passed to it with path strFolder
'From a Michael Harris script
Set FSO = createobject("scripting.filesystemobject")
With FSO.getfolder(strFolder)
.Attributes = .Attributes Or 2
End With
End Sub
Sub Include(FilePath)
' Given the path to a file, will execute entire contents
' in global context
Const ForReading = 1, TristateUseDefault = -2, _
DoNotCreateFile = False
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(FilePath, ForReading, _
False, TristateUseDefault)
ExecuteGlobal .ReadAll: .Close
End With
End Sub
Function IsDcUp(Server)
' Verify whether a DC is uo or not
On Error Resume Next
CreateObject("Scripting.FileSystemObject")._
GetFolder("\\" & Server & "\netlogon")
If Err.Number <> 0 Then
IsDcUp = False
Err.Clear
Else
IsDcUp = True
End If
On Error Goto 0
End Function
Function IsFile(sPath)
' Returns true if a file exists
IsFile = False
If CreateObject("Scripting.FileSystemObject"). _
FileExists(sPath) Then IsFile = True
End Function 'IsFile
Function IsFolder(sPath)
IsFolder = CStr(False)
If CreateObject("Scripting.FileSystemObject")._
FolderExists(sPath) Then IsFolder = CStr(True)
End Function
Function IsHiddenFile(strFile)
'Hides a folder passed to it with path strFolder
Set FSO = createobject("scripting.filesystemobject")
With FSO.getfile(strFile)
IsHiddenFile = CBool(.Attributes And 2)
End With
End Function
Function IsHiddenFolder(strFolder)
'Hides a folder passed to it with path strFolder
Set FSO = createobject("scripting.filesystemobject")
With FSO.getfolder(strFolder)
IsHiddenFolder = CBool(.Attributes And 2)
End With
End Function
Function IsShare(sPath)
On Error Resume Next
CreateObject("Scripting.FileSystemObject")._
GetFolder(sPath)
If Err.Number = 0 then
IsShare = True
Else
Err.Clear
IsShare = False
End If
On Error Goto 0
End Function
Function IsUnicodeFile(filename)
Dim FSO, ts, char1, char2
Set FSO = createobject("scripting.filesystemobject")
Set ts = fso.opentextfile(filename)
IsUnicodeFile = False
char1 =ts.read(1)
char2 =ts.read(1)
ts.close
if asc(char1) = 255 and asc(char2) = 254 then
IsUnicodeFile = True
End If
End Function
Function LargestNumberedSubFolder(sPath)
' Finds the highest numbered subfolder within
' a given directory
Dim FSO, f, f1, fc, s, Largest
Largest = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFolder(sPath)
Set fc = f.SubFolders
On Error Resume Next
For Each f1 in fc
s = CInt(f1.name)
If Err.Number = 0 Then
If s > Largest Then _
Largest = s
Else
Err.Clear
End If
Next
LargestNumberedSubFolder = Largest
End Function
Function LinesInFile(sFil)
'Returns total line count for sFil
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fil = FSO.OpenTextFile(sFil, 1)
fil.Readall
LinesInFile = fil.Line
End Function
Sub Logger(FilePath, sData)
'Given the path to a file, will append timestamped data
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(FilePath, 8, True)
.Write Now & " | " & sData & vbCrLf: .Close
End With
End Sub
Sub LowerCaseFSO(Folspec)
' lowercases all file and folder names within the path specified
Dim fil, fils, fol, fols, FSO, sFolders()
Dim lngCounter, sFilName, sFolName
Const READONLY = 1, HIDDEN = 2, SYSTEM = 4
ReDim sFolders(0)
Set FSO = CreateObject("Scripting.FileSystemObject")
sFolders(0) = FSO.GetAbsolutePathName(Folspec)
lngCounter = 0
Do Until lngCounter > UBound(sFolders,1)
'Next folder to process
Set fol = FSO.GetFolder(sFolders(lngCounter))
'Get each file in turn
Set fils = fol.Files
If Err.Number <> 0 Then Exit Sub
For Each fil In fils
sFilName = LCase(fil.Name)
If fil.Name <> sFilName Then
fil.Name = FSO.GetTempName: fil.Name = sFilName
End If
Next
'Check for any sub folders and add them to the folder array
Set fols = fol.SubFolders
For Each fol In fols
If Lcase(fol.Name) <> "recycled" Then
ReDim Preserve sFolders(UBound(sFolders,1) + 1)
sFolders(UBound(sFolders,1)) = fol.Path
End If
sFolName = LCase(fol.Name)
If fol.Name <> sFolName Then
fol.Name = FSO.GetTempName: fol.Name = sFolName
End If
Next
lngCounter = lngCounter + 1
Loop
End Sub
Function Map(sDrive,SPath)
' Returns boolean for maping success
on Error Resume Next
set oNet = CreateObject("WScript.Network")
oNet.MapNetworkDrive sDrive, sPath
If Err.Number <> 0 Then
Map = False
Else
Map = True
End If
Err.Clear
End Function
Sub md(fldr)
' Recursively create the directory path provided in fldr
' May be used with UNC paths
Dim aPath, FSO, fol, i
aPath = Split(fldr,"\")
Set FSO = CreateObject("Scripting.FileSystemObject")
fol = aPath(0)
If Len(Replace(fol,":",""))=Len(fol) Then fol = "\\" & fol
For i = 1 To UBound(aPath)
fol = fol & "\" & aPath(i)
If Not FSO.FolderExists(fol) Then FSO.CreateFolder(fol)
Next
End Sub
Function MoveFile(oldname,newname)
Dim fso
On Error Resume Next
Err.Clear
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile oldname,newname
If Err.Number<>0 Then
MoveFile = False
Err.Clear
Else
MoveFile = True
End If
End Function
Sub NetSend(from, Host, message)
With CreateObject("Scripting.FileSystemObject")
slot = "\\" & Host & "\MAILSLOT\messngr"
.CreateTextFile(slot, True).Write from & chr(0) & Host _
& chr(0) & message & chr(0)
End With
End Sub
Function ShowFileAccessInfo(filespec)
Dim fso, f, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filespec)
s = UCase(filespec) & VBCRLF
s = s & "Created: " & f.DateCreated & VBCRLF
s = s & "Last Accessed: " & f.DateLastAccessed & VBCRLF
s = s & "Last Modified: " & f.DateLastModified & VBCRLF
s = s & "File Size (Bytes): " & f.Size & VBCRLF
s = s & "File Type: " & f.Type & VBCRLF
s = s & "Short Name: " & f.ShortName & VBCRLF
s = s & "Path: "& f.Path & VBCRLF
s = s & "Attributes: "& f.Attributes & VBCRLF
ShowFileAccessInfo = s
Set f = Nothing
Set fso = Nothing
End Function
Sub ShowFolder(strFolder)
'Un-hides a folder passed to it with path strFolder
'Michael Harris, of course
Set FSO = createobject("scripting.filesystemobject")
With FSO.getfolder(strFolder)
.Attributes = .Attributes XOr 2
End With
End Sub
Function SysDir()
SysDir = CreateObject("Scripting.FileSystemObject"). _
GetSpecialFolder(1).Path
End Function 'SysDir
Function Tail(fil, nlines)
'Returns last nlines lines from file fil
Const ForReading = 1, TristateUseDefault = -2, _
DoNotCreateFile = False
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(fil, ForReading, _
False, TristateUseDefault)
.Readall
LinesToSkip = .Line - nlines: .Close
End With
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(fil, ForReading, _
False, TristateUseDefault)
If LinesToSkip <0 Then LinesToSkip = 0
For i = 1 To LinesToSkip: .Skipline: Next
For i = 1 To nlines
If Not .AtEndOfStream Then
Tail = Tail & .ReadLine
End If
If i < nlines Then Tail = Tail & vbCrLf
Next
.Close
End With
End Function
Function TempDir()
TempDir = CreateObject("Scripting.FileSystemObject"). _
GetSpecialFolder(2).Path
End Function 'SysDir
Function TempFile
TempFile = CreateObject( _
"Scripting.FileSystemObject").GetTempName
End Function
Function TempFileBase
Set FSO = CreateObject("Scripting.FileSystemObject")
Const TemporaryFolder = 2
Set folTemp = FSO.GetSpecialFolder(TemporaryFolder)
' Returns path to a unique, randomly generated file name
' within the %TEMP% folder
'Following sequence allows 360,040,606,269,696 unique file names
chrList = _
"abcdefghijklmnopqrstuvwxyz0123456789,~-_&[]()#@!`;+="
uLimit = Len(chrList)
Randomize
For i = 1 To 8
sTmp = sTmp & Mid(chrList, ((uLimit) * Rnd + 1), 1)
Next
TempFileBase = folTemp & "\" & sTmp
End Function
Sub TrimFileSize(filspec,toSize)
' Based on (lightly) modified code from Eric Phelps
' This script reduces the size of line-oriented log files.
' It erases the first (oldest) lines in a log file until
' it gets the log down below the specified size.
Dim ts, fs, sText
Const ForReading = 1 'Scripting.IOMode
Const ForWriting = 2 'Scripting.IOMode
Set fs = CreateObject("Scripting.FileSystemObject")
' If it fails anywhere, just quit.
On Error Resume Next
' Read the file
Set ts = fs.OpenTextFile(filspec, ForReading)
If Err.Number <> 0 Then exit sub
sText = ts.ReadAll
ts.Close
' See if the file is already below desired size
If Len(sText) < toSize Then: exit sub
sText = Right(sText, toSize) ' Trim the file
If (Instr(sText, vbCrlf) = 0) _
Or (Instr(sText, vbCrlf) + 3 > Len(sText)) Then
exit sub
Else
sText = Mid(sText, Instr(sText, vbCrlf) + 2)
End If
''''''''''Write the shortened file
Set ts = fs.OpenTextFile(filspec, ForWriting)
If Err.Number <> 0 Then exit sub
ts.Write sText: ts.Close
End Sub
Function UtfRead(FilePath)
Const TriStateTrue = -1
'Given the path to a file, will return entire contents
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(FilePath, 1, False, TriStateTrue)
UtfRead = .ReadAll: .Close
End With
End Function
Sub UtfWrite(FilePath, sData)
Const TriStateTrue = -1
'Given the path to a file, will return entire contents
With CreateObject("Scripting.FileSystemObject")._
OpenTextFile(FilePath, 2, False, TriStateTrue)
.Write sData: .Close
End With
End Sub
Function VerFile(sPath)
On Error Resume Next
VerFile = 0
If IsFile(sPath) Then
VerFile = CreateObject("Scripting.FileSystemObject"). _
GetFileVersion(sPath)
End If
Err.Clear
End Function
Function WinDir()
WinDir = CreateObject("Scripting.FileSystemObject"). _
GetSpecialFolder(0).Path
End Function 'SysDir