当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbs实现按创建日期的顺序列出一个文件夹中的所有文件

VBScript
用vbs脚本来关闭 HTML 页面的代码
用vbs实现确定是否安装了某个特定的补丁
用vbs确定用户的登录名的代码
用vbs找到映射到共享的所有驱动器并重新映射它们
可以从一台远程服务器运行 SP2 安装程序Install.vbs
用vbs判断一个日期是否在指定的时段内
vbs+hta中实现在单个 onClick 参数中包括多个子例程的代码
vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
用vbs实现对文本文件中的项计数
用vbs对文本文件的内容进行排序
用vbscript把 Word 文档保存为文本文件的代码
用vbs返回 Internet Explorer 的下载控件和 Applet 的列表
用vbscript合并多个文本文件的代码
用vbscript防止本地用户更改其密码
用vbs针对一个 IP 地址范围运行脚本
用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
使用vbscript脚本在表单中进行选择的代码
一个把任何文件转成批处理的vbs脚本Any2Bat.vbs
windows脚本调试howto的方法
注册表的禁用与解锁方法集合

VBScript 中的 用vbs实现按创建日期的顺序列出一个文件夹中的所有文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 43 ::
收藏到网摘: n/a

问:
你好,脚本专家!如何按创建日期的顺序列出一个文件夹中的所有文件?
-- CL
答:
你好,CL。您知道,如果我们雄心勃勃并且努力工作,我们会坐下来为您写一个脚本,以使用 WMI 返回一个文件夹中的所有文件。该脚本将获取有关所有这些文件的信息,并将该数据存储在未连接的记录集中。然后,在该记录集中设置排序顺序以按创建日期和时间对文件进行排列。(接着,我们进行大量的重复性工作,以将 WMI 的日期时间值转换为易读的日期时间格式。)最后,我们将记录集中的所有值回显到屏幕上。它需要花费大量时间并编写许多代码,但最终您会得到已排序的文件列表,而且每个人都会说“哇,那些脚本专家真是为读者尽心尽力,不是吗?”
而事实上,我们并非雄心勃勃和努力工作;我们只是脚本专家。作为脚本专家,我们一直在寻找最快速、最简便的解决问题的方法。因此,我们没有去写一个冗长而复杂的脚本,而是弄来了一份 Log Parser 2.2,并匆忙完成了以下几行代码:
复制代码 代码如下:

Set objLogParser = CreateObject("MSUtil.LogQuery")
Set objInputFormat = CreateObject("MSUtil.LogQuery.FileSystemInputFormat")
objInputFormat.Recurse = 0
Set objOutputFormat = CreateObject("MSUtil.LogQuery.NativeOutputFormat")
objOutputFormat.rtp = -1
strQuery = "SELECT Name, CreationTime FROM 'C:\Scripts\*.*' " & _
"WHERE NOT Attributes LIKE '%D%' ORDER BY CreationTime"
objLogParser.ExecuteBatch strQuery, objInputFormat, objOutputFormat

猜猜看?此脚本不但能正常工作,还能返回文件列表(按创建日期和时间排序),而不管实际情况怎样。太酷了。
当然,我们通常建议不使用非操作系统内置的解决方案;因为我们不想让人们下载和安装一些不是绝对必需的东西。然而,当要列举文件时,很有必要下载和安装 Log Parser;当您不得不获得有关一组文件的信息时,您会发现 Log Parser 方法优于 WMI 或 FileSystemObject。Log Parser 的七八行代码比得上 WMI 的六七十行代码吗?我们会把决定权留给您。
我们不会花时间介绍有关 Log Parser 的所有信息;有关详细信息,您可以参阅“脚本故事”专栏您需要的所有内容就是日志(即 Log Parser)。现在,我们只需注意,脚本从创建 Log Parser 对象的实例开始,使用易记忆的名称 MSUtil.LogQuery 以便于更好的记忆。然后,我们创建两个其他对象,第一个指定我们正在使用的对象(在此情况下为文件系统,虽然我们也可以使用事件日志、Active Directory、注册表和其他项),第二个指明我们要使用的输出类型(在此示例脚本中,我们要做的所有事情就是将数据写入命令窗口)下列两行代码创建输入对象,并告诉 Log Parser 不从任何子文件夹检索文件:
Set objInputFormat = CreateObject("MSUtil.LogQuery.FileSystemInputFormat")
objInputFormat.Recurse = 0
如果我们确实要检索任意或所有子文件夹的值,该怎么办?在该情况下,我们必须要做的所有事情就是将 Recurse 属性的值设置为 -1:
objInputFormat.Recurse = -1
同时,下列两行代码创建输出对象,并告诉 Log Parser 显示所有数据而不要暂停:
Set objOutputFormat = CreateObject("MSUtil.LogQuery.NativeOutputFormat")
objOutputFormat.rtp = -1
或者,我们可以告诉 Log Parser 显示 10 行数据,然后暂停,直到我们按键盘上的某个键,然后再显示下 10 行数据。若要按每 10 行一批的规律显示数据,我们必须要做的所有事情就是将 rtp 属性的值设置为 10:
objOutputFormat.rtp = 10
接下来配置 SQL 查询以检索文件信息。如果您对 SQL 有一些了解,此查询应该相对容易分析一些;如您所见,我们正要查询 C:\Scripts 中所有文件的 Name 和 CreationTime。此外,我们要使返回的数据按创建日期和时间顺序排列,最先创建的文件排在最前面:
strQuery = "SELECT Name, CreationTime FROM 'C:\Scripts\*.*' " & _
"WHERE NOT Attributes LIKE '%D%' ORDER BY CreationTime DESC"
此查询中唯一不寻常的就是 WHERE 子句:WHERE NOT Attributes LIKE '%D%'。不用作过多的解释,此子句筛选出文件夹,从而只返回文件。包含 Directory 属性的文件系统对象就是文件夹;因为我们不想要文件夹,所以使用 WHERE NOT 语法清除拥有 Directory(缩写为 %D%)属性的所有对象。
最后,调用 ExecuteBatch 方法来运行查询并将返回的数据写入命令窗口。一两秒钟之后,我们将获得如下所示的内容:

我们不需要输入任何特殊的命令就可以获得这一精密的表格输出;Log Parser 为我们处理所有问题。它真是太棒了,不是吗?
诚然,我们不必费很大力气就可以获得这些结果。而且它既快捷又简便。您可以这么来看:任何人都不必知道我们不努力工作,不是吗?