[UMU WSH 教程](42) FSO 应用实例 - 批量删除文件 git
UMU WSH 教程代码下载:http://sdrv.ms/ZpPPaS ui
UMU WSH Git:http://git.oschina.net/umu618/umu-wsh .net
bmp 格式的图片占空间比较大,转为无损压缩的 png 格式能够节省空间。下面利用 FSO 和 WIA 对象批量转换 bmp 文件为 png 格式。 code
' 43_bmp2png.VBS ' UMU @ 0:23 2012/10/14 ' [UMU WSH 教程](43) WIA 应用实例 - 批量转换图片格式 Option Explicit Const wiaFormatPNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}" Const APP_TITLE = "UMU.Script.Tools.bmp2png" Dim objArgs, objFSO Set objArgs = WScript.Arguments Set objFSO = CreateObject( "Scripting.FileSystemObject" ) If objArgs.Count = 0 Then Dim objWSH Dim szSendto, szCopyTo MsgBox "本程序用来把 bmp 格式图片转换为 png 格式。" & vbCrLf & _ "请把要处理的文件或文件夹拖放到本程序的图标上!", _ vbInformation, APP_TITLE Set objWSH = CreateObject( "WScript.Shell" ) szSendto = objWSH.SpecialFolders("SendTo") szCopyTo = szSendto & "\bmp2png.VBE" If Not objFSO.FileExists(szCopyTo) Then If vbOK = MsgBox("本程序用来把 bmp 格式图片转换为 png 格式。" & vbCrLf & _ "请把要处理的文件或文件夹拖放到本程序的图标上!" & vbCrLf & vbCrLf & _ "提示:您能够把此文件放在 Sendto 目录里,而后使用右键菜单的“发送到”。" & vbCrLf & _ "您的 Sendto 目录是 " & szSendto & vbCrLf & "按“肯定”执行复制操做。", _ vbOKCancel + vbInformation, APP_TITLE) Then objFSO.CopyFile WScript.ScriptFullName, szCopyTo If vbYes = MsgBox("是否查看 Sendto 目录?", vbQuestion + vbYesNo, APP_TITLE) Then objWSH.Run "%SystemRoot%\explorer.exe /n, /select," & szCopyTo End If End If End If Set objFSO = Nothing Set objWSH = Nothing Set objArgs = Nothing WScript.Quit End If Dim fDelete fDelete = MsgBox( "转换后是否删除原 bmp 文件?", vbYesNoCancel + vbQuestion, "询问" ) If vbCancel = fDelete Then Set objArgs = Nothing WScript.Quit End If Dim ar, nSucceededCount, nFailedCount, nPngExistsCount nSucceededCount = 0 nFailedCount = 0 nPngExistsCount = 0 For Each ar In objArgs If objFSO.FolderExists(ar) Then Call BmpToPng_s(ar) ElseIf objFSO.FileExists(ar) Then Call BmpToPng(ar) End If Next Set objArgs = Nothing Set objFSO = Nothing MsgBox "转换 bmp 文件 " & nSucceededCount & " 个,失败 " & nFailedCount & _ " 个,PNG 文件已经存在 " & nPngExistsCount & " 个!", 4160, "整个世界清净了!" Private Sub BmpToPng_s( ByVal szFolderPath ) 'On Error Resume Next Dim rfd, fs, f, fds, fd Set rfd = objFSO.GetFolder( szFolderPath ) Set fs = rfd.Files For Each f In fs BmpToPng f.Path Next Set fds = rfd.SubFolders For Each fd In fds BmpToPng_s fd.Path Next End Sub Private Sub BmpToPng( ByVal szFilePath ) On Error Resume Next Dim szExt, szPng szExt = Right( szFilePath, 4 ) If StrComp( szExt, ".bmp", vbTextCompare ) Then Exit Sub End If szPng = Left(szFilePath, Len(szFilePath) - 4) & ".png" If objFSO.FileExists(szPng) Then nPngExistsCount = nPngExistsCount + 1 Exit Sub End If Err.Clear Dim objIF, objIP Set objIF = CreateObject( "WIA.ImageFile" ) Set objIP = CreateObject( "WIA.ImageProcess" ) objIF.LoadFile szFilePath If Err.Number Then nFailedCount = nFailedCount + 1 Exit Sub End If If objIF.FormatID <> wiaFormatPNG Then objIP.Filters.Add objIP.FilterInfos("Convert").FilterID objIP.Filters(1).Properties("FormatID").Value = wiaFormatPNG Set objIF = objIP.Apply(objIF) objIF.SaveFile szPng If Err.Number Then Set objIF = Nothing Set objIP = Nothing nFailedCount = nFailedCount + 1 Exit Sub End If nSucceededCount = nSucceededCount + 1 If vbYes = fDelete Then objFSO.DeleteFile szFilePath End If End If Set objIF = Nothing Set objIP = Nothing End Sub