空のフォルダを削除するWSH(VBScript)

Windowsの雑多な操作から解消されるたいので、WSHを勉強しはじめた。
まず、「指定したフォルダ配下の空のフォルダを削除する」スクリプトを作った。
作るときには、このサイトをかなり参考にさせてもらいました。
エクセルvba.tokyo - このウェブサイトは販売用です! - エクセルvba リソースおよび情報

使い方

  1. 下記ソースコード中のtargetFolderに削除したいフォルダがあるルートフォルダを指定する
  2. ソースコードを拡張子vbsでファイルに保存する
  3. ファイルをダブルクリックする

※実行は自己責任でお願いします。ファイルはゴミ箱へ行かずに削除されます。

ソースコード

Option Explicit

Dim objApl
Dim objFolder
Dim objFolderItems
Dim numFolderSize
Dim numFileCount
Dim numFolderCount
Dim targetFolder
Dim completeFlag
Dim returnCode

numFolderSize=0
numFileCount=0
numFolderCount=0

targetFolder ="ここに削除対象とするルートフォルダをフルパスで入れる。"

returnCode = MsgBox(targetFolder &  " 配下の空のフォルダを削除します。"&vbCrLf &  vbCrLf & "実行してよろしいですか?",vbExclamation+vbYesNo,"削除プログラム実行の確認")

if returnCode  =vbNo Then
	WScript.Quit
end if

Set objApl = WScript.CreateObject("Shell.Application")

'空のフォルダがなくなるまで繰り返す
Do 
    completeFlag = "TRUE"

	Set objFolder = objApl.NameSpace(targetFolder)

	Set objFolderItems = objFolder.Items()

	'空のフォルダを削除する
	Call deleteFolder (objFolderItems)

LOOP  While completeFlag = "FALSE"

WScript.Echo targetFolder & " 配下の空のフォルダを削除しました。"
Set objFolderItems = Nothing
Set objFolder = Nothing
Set objApl = Nothing

'==============================================================
' 空のフォルダを削除する
'==============================================================
Sub deleteFolder(tmpFolderItems)

    Dim objFolderItemsB
    Dim objItem
    
    Dim i

    'フォルダ中を順番に調べる
    For i=0 To tmpFolderItems.Count-1
    
        Set objItem = tmpFolderItems.Item(i)

        'フォルダであれば、さらに配下を調べる
        If objItem.IsFolder Then
           'フォルダであれば、フォルダアイテムオブジェクトを
           '作り、それを引数としてdeleteFolderを再帰呼び出します
           Set objFolderItemsB = objItem.GetFolder
         
           'フォルダが空なら削除する
      	   If objFolderItemsB.items().Count = 0 Then
      	      Dim FSO
   	      Set FSO = CreateObject("Scripting.FileSystemObject")
   	      FSO.GetFolder(objItem.Path).Delete
    	      Set FSO = Nothing
    	      completeFlag = "FALSE"
	   else
              Call deleteFolder (objFolderItemsB.Items())
           end if
        end if
    Next

    Set objItem = Nothing
    Set objFolderItemsB = Nothing

End Sub