A VBScript to rename file and directory names to lowercase

The following Script can be used to rename all files and directories to lowercase. All Files and Subdirectories within the current directory and all it's subdirectories are renamed.

To run the script, the following command can be used:

cscript -nologo RenLowercase.vbs

File RenLowercase.vbs.zip

' RenLowercase.vbs  -  Rename files and directories to lowercase
' This script renames all the files and subdirectories in the current
' directory and all it's subdirectories to lowercase.
' Author: Christian d'Heureuse (www.source-code.biz)

Option Explicit

Dim StdIn:  Set StdIn = WScript.StdIn
Dim StdOut: Set StdOut = WScript.StdOut
Dim fso:    Set fso = CreateObject("Scripting.FileSystemObject")

Dim FilesRenamed:   FilesRenamed = 0
Dim FilesSkipped:   FilesSkipped = 0
Dim FoldersRenamed: FoldersRenamed = 0
Dim FoldersSkipped: FoldersSkipped = 0


Sub Main
   Dim CurrentFolder: Set CurrentFolder = fso.GetFolder(".")
   StdOut.WriteLine "Warning: All files and subdirectories within the directory """ & _
         CurrentFolder.Path & """ and all it's subdirectories will be renamed to lowercase."
   If Not PromptYesNo("Continue?") Then Exit Sub
   ProcessFolder CurrentFolder
   StdOut.WriteLine FilesRenamed & " Files and " & FoldersRenamed & " Folders renamed to lowercase."
   StdOut.WriteLine FilesSkipped & " Files and " & FoldersSkipped & " Folders were already lowercase."
   End Sub

Sub ProcessFolder (ByVal Folder)
   Dim Files: Set Files = Folder.Files
   Dim File
   For Each File In Files
      If File.Name <> LCase(File.Name) Then
         File.Move LCase(File.Path)
         FilesRenamed = FilesRenamed + 1
         FilesSkipped = FilesSkipped + 1
         End If
   Dim SubFolders: Set SubFolders = Folder.SubFolders
   Dim SubFolder
   For Each SubFolder In SubFolders
      If SubFolder.Name <> LCase(SubFolder.Name) Then
         SubFolder.Move LCase(SubFolder.Path)
         FoldersRenamed = FoldersRenamed + 1
         FoldersSkipped = FoldersSkipped + 1
         End If
      ProcessFolder SubFolder
   End Sub

Function PromptYesNo (ByVal PromptText)
      StdOut.Write PromptText & " (y/n) - "
      Dim s: s = StdIn.ReadLine()
      Select Case LCase(Trim(s))
         Case "n","no"  PromptYesNo = False: Exit Function
         Case "y","yes" PromptYesNo = True:  Exit Function
         End Select
      StdOut.WriteLine "Invalid input."
   End Function

Author: Christian d'Heureuse (www.source-code.biz, www.inventec.ch/chdh)
License: Free / LGPL