注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

VBS利用Shell.Application来批量获取图片分辨率  

2017-04-12 12:41:11|  分类: 操作系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Shell.Application表示外壳中的对象,该方法在VBS中被提供于控制外壳和执行外壳内的命令,也有一些方法可以获得其他外壳相关的对象。这个对象功能比较强大,不但可以用于执行文件,打开目录,控制面板还可以获取文件中的常用信息。
下面列出一些它的常用方法:
Shell.Explore(vDir) 
下面的例子:用浏览器打开相应的目录C:\

Set objShell = CreateObject("Shell.Application")
REM 打开C盘
objShell.Explore("c:\")

执行效果就是如下:
VBS利用Shell.Application来批量获取图片分辨率 - sinsunson - 天朝布衣田中码农参上
 
其它的方法大家也可以尝试着去用用。
Shell.Open(vDir) /*打开目录,或者执行文件,可不要用做邪恶的事哦!*/
Shell.FileRun() /*显示运行对话框 */
Shell.FindComputer() /*查找计算机*/
Shell.FindFiles() /*查找文件*/
Shell.FindPrinter() /*显示"查找打印机"对话框允许用户找到打印机。*/
Shell.Help() /*帮助*/
Shell.MinimizeAll() /*最小化所有窗口*/
Shell.UndoMinimizeALL() /*取消最小化所有窗口*/
Shell.RefreshMenu() /*刷新菜单项*/
Shell.SetTime() /*设置时间*/
Shell.TrayProperties() /*托盘属性*/
Shell.ShutdownWindows() /*关闭计算机*/
Shell.Suspend() /*挂起计算机*/
Shell.CascadeWindows() /*层叠桌面上所有窗口,相当于右击任务栏选择"层叠窗口"*/
Shell.TileHorizontally() /*水平排列各窗口*/
Shell.TileVertically() /*垂直排例各窗口*/
Shell.ControlPanelItem(sDir) /* 运行指定的控制面板(*.cpl)应用程序。如果应用程序已经打开,它就会激活运行的实例。*/
Shell.EjectPC()  /*挂起计算机。如果电脑支持这个命令。*/
oWindows = Shell.Windows()  /* 返回ShellWindows对象 */
fFolder = Shell.NameSpace(vDir)  /*返回所打开的vDir的Folder或File对象,比较重要的一个对象 */
oFolder = Shell.BrowseForFolder(Hwnd, sTitle, iOptions [, vRootFolder])  /* 选择文件夹对话框*/
Shell对象的 BrowseForFolder方法 或 NameSpace方法 的返回值Folder对象有如下方法:
Folder.GetDetailsOf() /*在一个文件夹内检索一个项目的详细信息。例如,它的大小、类型、或最后修改时间*/
Folder.Items() /*得到FolderItems对象,表示文件夹内项目的集合。*/
好了,这些方法也仅是比较常用的方法,更多的该去请自行去MSDN查询,下面我们就要来说说,如何批量获取图片的分辨率,相关的vbs脚本如下:

Set objArgs = WScript.Arguments
REM 取输入参数文件
soureFile = objArgs(0)
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
dim returnmsg
FilesTreeScan(soureFile)
Msgbox returnmsg
Function FilesTreeScan(sPath)
REM 遍历一个文件夹下的所有文件夹文件夹
Set oFso = CreateObject("Scripting.FileSystemObject")
REM 先判断是不是就是一个文件
If oFso.FileExists(sPath) Then
REM 获取输入的文件名信息
arr = Split(sPath,"\")
FileName = arr(Ubound(arr))
FolderPath = Left(sPath, Len(sPath) - Len(FileName) - 1)
Set objFolder = objShell.Namespace(FolderPath)
set objFolderItem = objFolder.ParseName(FileName)
returnmsg=soureFile&" Width: " & objFolder.GetDetailsOf(objFolderItem, 162) & " Height: "_
& objFolder.GetDetailsOf(objFolderItem, 164)
Else
Set oFolder = oFso.GetFolder(sPath)
Set oSubFolders = oFolder.SubFolders
Set oFiles = oFolder.Files
For Each oFile In oFiles
REM 是文件才处理
arr = Split(oFile.Path,"\")
FileName = arr(Ubound(arr))
FolderPath = Left(oFile.Path, Len(oFile.Path) - Len(FileName) - 1)
Set objFolder = objShell.Namespace(FolderPath)
set objFolderItem = objFolder.ParseName(FileName)
returnmsg=returnmsg&oFile.Path&" Width: "_
&objFolder.GetDetailsOf(objFolderItem, 162) & " Height: "_
&objFolder.GetDetailsOf(objFolderItem, 164)& vbcr
Next
For Each oSubFolder In oSubFolders
REM 递归处理子目录
FilesTreeScan(oSubFolder.Path)
Next
End If
REM 销毁变量
Set oFolder = Nothing
Set oSubFolders = Nothing
Set objFolder = Nothing
Set objFolderItem = Nothing
Set oFso = Nothing
End Function

将此脚本保存为imginfo.vbs,然后想要察看那些图片或目录,直接将之拖动到这文件上即可。执行效果如下:
VBS利用Shell.Application来批量获取图片分辨率 - sinsunson - 天朝布衣田中码农参上
怎么样,是不是很方便,另外,也请注意有些系统获取宽高是27、28两项。如果还不能确定的话,请自行加入如下代码察看:

REM 循环获取属性值
For i = 1 To 200 '循环200次
If objFolder.GetDetailsOf(objFolderItem, i)<>"" Then
SetStringFor = SetStringFor&i&":"&objFolder.GetDetailsOf(objFolderItem, i)& vbcr
End If
Next
MsgBox SetStringFor '输出文件信息

这段代码加入set objFolderItem = objFolder.ParseName(FileName)之后即可,就可以察看当前系统的相关属性的对应数值。
VBS利用Shell.Application来批量获取图片分辨率 - sinsunson - 天朝布衣田中码农参上
怎么样,是不是就很清晰了,如果想要获取文件大小,更新时间之类的,同样也是可以的。只要调下参数162或164即可。
  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017