用vbscript合并多个文本文件的代码

问:
嗨,Scripting Guy!在命令提示符中,可以执行命令“copy a.txt+b.txt ab.txt”来提取 a.txt 和 b.txt 的内容,然后将它们合并到名为 ab.txt 的新文件中。可以使用脚本来实现相同的操作吗?

-- DL

答:
嗨,DL。在昨天的专栏文章中,我们探讨了有关文本文件的问题;更具体地讲,我们讨论如何使用脚本来修改 .INI 文件。我们提到,这种解决方法尽管不是很巧妙,但可以达到目的。就今天的问题来说,同样是这种情况。我们可以使用脚本来合并文本文件吗?是的,可以。只不过有一点繁琐,但效果很好。

我们所遇到的难题是,WSH 和 VBScript 都无法通过一条命令来合并文本文件,例如,objFile.AddTextFiles("file1.log","file2.log")。这有点让人失望,但我们不会就此罢手,我们依然可以合并文本文件;只不过需要多执行几个步骤罢了。例如,要将 File1.log 和 File2.log 合并为一个文件(我们将其命名为 Output.txt),需要先读取 File1.log,将该文件的内容附加到 output.txt 末尾,然后读取 File2.log,再将该 文件的内容附加到 Output.txt 末尾。事实上,我们必须使用类似下面的脚本:

代码如下:

Const ForReading = 1

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objOutputFile = objFSO.CreateTextFile("output.txt")

Set objTextFile = objFSO.OpenTextFile("c:\logs\file1.log", ForReading)

strText = objTextFile.ReadAll 
objTextFile.Close 
objOutputFile.WriteLine strText

Set objTextFile = objFSO.OpenTextFile("c:\logs\file2.log ", ForReading)

strText = objTextFile.ReadAll 
objTextFile.Close 
objOutputFile.WriteLine strText

objOutputFile.Close

正如您所看到的一样,该脚本并不是特别复杂。首先,我们定义一个常量 (ForReading),用于打开每个日志文件。接下来,创建一个 FileSystemObject(用于处理文本文件的脚本技术)实例,并使用 CreateTextFile 方法创建一个名为 Output.txt 的新文件。

然后,打开第一个文件 (C:\Logs\File1.log) 来读取其中的内容。我们使用 ReadAll 方法读入整个文本文件,并将该信息存储在变量 strText 中。然后,关闭 File1.log,并使用 WriteLine 方法将刚读入的信息附加到新文件 Output.txt 的末尾。接下来,对下一个文件 (C:\Logs\File2.log) 执行相同的过程。读入第二个文件后,Output.txt 将包含第一个文件以及 第二个文件中的所有信息。哈哈,我们成功了!

我们知道您在想什么:不错,尽管上述脚本可以实现目的,但问题是您必须“事先”知道文件夹 C:\Logs 中所有文件的名称。那么,编写一个脚本以获取 C:\Logs 中的所有文件并将它们合并在一起,岂不是更好?嗯,我们还未曾这样想过。您所说的是不是类似下面的脚本:

Const ForReading = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile("output.txt")

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set FileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='C:\Logs'} Where " _
        & "ResultClass = CIM_DataFile")

For Each objFile In FileList
    Set objTextFile = objFSO.OpenTextFile(objFile.Name, ForReading) 
    strText = objTextFile.ReadAll
    objTextFile.Close
    objOutputFile.WriteLine strText
Next

objOutputFile.Close

实际上,我们在此处执行的全部操作是获取 C:\Logs 文件夹中所有文件的集合;这是通过以下 WMI Associators of 查询实现的:

Set FileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='C:\Logs'} Where " _
        & "ResultClass = CIM_DataFile")

在获取这一集合后,我们可以立即使用 For-Each 循环打开每个文件并读入其中的文本(使用 ReadAll 方法,与上文中的代码相同)。然后关闭该文件,将文本附加到输出文件的末尾。接下来再执行一次循环,对集合中的下一个文件执行相同的过程。只需片刻,就可以将 C:\Logs 中所有文件的所有文本提取出来,并将它们合并为一个名为 output.txt 的新文件。整个过程就是这么简单。

(0)

相关推荐

  • 用VBScript写合并文本文件的脚本

    合并文本的脚本可以这么写: 复制代码 代码如下: Sub AppendTextFile(filename) Set objTextFile = objFSO.OpenTextFile(filename, ForReading, true, -2) Do Until objTextFile.AtEndOfStream objOutFile.WriteLine(objTextFile.Readline) Loop End Sub 可是如果所读取的文件是UTF-8格式的,那么文件开头的三个字节的标识符

  • 用vbs分割与合并文本文件的代码

    然而想到其他地方再次下载时发现一次性导入几万个地址非常缓慢,所以有必要把它分割了:(在这个txt文件中,一个地址占一行) url_split.vbs文件内容: 复制代码 代码如下: Set fs =CreateObject("scripting.filesystemobject") Set gs =CreateObject("scripting.filesystemobject") Set f=fs.opentextfile("url.txt",

  • 用vbscript合并多个文本文件的代码

    问: 嗨,Scripting Guy!在命令提示符中,可以执行命令"copy a.txt+b.txt ab.txt"来提取 a.txt 和 b.txt 的内容,然后将它们合并到名为 ab.txt 的新文件中.可以使用脚本来实现相同的操作吗? -- DL 答: 嗨,DL.在昨天的专栏文章中,我们探讨了有关文本文件的问题:更具体地讲,我们讨论如何使用脚本来修改 .INI 文件.我们提到,这种解决方法尽管不是很巧妙,但可以达到目的.就今天的问题来说,同样是这种情况.我们可以使用脚本来合并文本

  • JSP中动态合并单元格的实例代码

    废话不多说了,具体代码如下所示: <span style="font-size:14px;"> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <table width="100%" border="0" cellspacing="0" cellpadding="0&q

  • c++实现合并文件以及拆分实例代码

    本文主要研究的是c++实现合并文件以及拆分的相关内容,分享了实现代码,具体如下. 昨天看到一篇介绍TFS的文章,大意是为了处理海量图片,采用分布式架构,将小图片合并为大的文件 兴趣驱使下,写了一个简单的文件合并拆分程序 合并的方法很简单,将小文件写入到大文件中,使用二进制的方式.在大文件头,用一个int记录合并进来的小文件的数量,接下来,一块一块的写入小文件. 每一块都分为三个部分,第一部分是文件的名称,用20个char 来记录:第二部分用一个int来记录小文件的长度:第三部分则是小文件的实际内

  • js使用Canvas将多张图片合并成一张的实现代码

    解决方案 function mergeImgs(list) { const imgDom = document.createElement('img') document.body.appendChild(imgDom) const canvas = document.createElement('canvas') canvas.width = 500 canvas.height = 500 * list.length const context = canvas.getContext('2d'

  • 用vbscript把 Word 文档保存为文本文件的代码

    问:  嗨,Scripting Guy!我有一系列 Word 文件.我想打开这些文件中的每一个并将它们另存为纯文本文件.有没有一种通过使用脚本实现此目的的方法呢? -- CG 答:  您好,CG.是的,使用一个脚本,您很容易实现此目的.事实上,除了极少例外情况之外,您在 Microsoft Office 程序中可以做到的事情基本上都可以使用一个脚本来完成.在 Word 中,您可以使用"文件"–"另存为"将 Word 文档另存为文本文件.您也可以使用一个脚本做同样的事

  • python将多个文本文件合并为一个文本的代码(便于搜索)

    但是,当一本书学过之后,对一般的技术和函数都有了印象,突然想要查找某个函数的实例代码时,却感到很困难,因为一本书的源代码目录很长,往往有几十甚至上百个源代码文件,想要找到自己想要的函数实例谈何容易? 所以这里就是要将所有源代码按照目录和文件名作为标签,全部合并到一处,这样便于快速的搜索.查找,不是,那么查找下一个--于是很快便可以找到自己想要的实例,非常方便.当然,分开的源代码文件依然很有用,同样可以保留.合并之后的源代码文件并不大,n*100KB而已,打开和搜索都是很快速的.大家可以将同一种编

  • vbs中使用 ADO 读取所有数据均在一行上的文本文件的代码

    使用 ADO 读取所有数据均在一行上的文本文件问: 您好,脚本专家!我有一个固定宽度的文本文件,该文件包含名字(6 个字符).姓氏(13 个字符)和部门(9 个字符),并且它们均在同一行上.我该如何使用 ADO 来读取呢? -- DW 答: 您好,DW.坦白地讲,我们认为您不能使用 ADO(ActiveX 数据对象)读取这样的文件.ADO 是一种和文本文件进行交互的非常好的方法(有关详细信息,请参阅文章有关文本文件的 ADO 更多知识(英文)),但是,确实,ADO 有些挑剔:它的每项设置都必须完

  • jscript与vbscript 操作XML元素属性的代码

    Although attributes belong to a particular element, they are not considered child nodes of element nodes. Instead, they behave more like properties of IXMLDOMElement. Most of the methods for working with attributes come from IXMLDOMElement. Attribute

  • 妙用VBScript自制IE工具栏按钮的代码

    IE工具栏上的各种按钮可不是Microsoft的专利,普通用户一样能够对其进行自定义,添加想设置的按钮,至于添加的方法,很多资料上都介绍过.具体的实现方式不外乎两种,一是使用冗长且复杂的VC或VB代码程序,这对普通用户来说要求是过高了一点,通常搞得人满头雾水而不达目的:二是用手工的方法来完成,但是这种方法因为要大幅度地修改系统注册表,系统极不安全,一不小心就会弄巧成拙,让你重新安装系统!  我这里介绍一个折衷的方法,用VBScript自制IE工具栏按钮,它既不需要冗长复杂的程序代码,又不需要繁琐

随机推荐