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

问:
嗨,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 的新文件。整个过程就是这么简单。

时间: 2024-07-31 14:19:32

用vbscript合并多个文本文件的代码_vbs的相关文章

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

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

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

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

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

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

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

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

一步步教你配置SQL SERVER合并复制(八)代码部分

一步步教你配置SQL SERVER合并复制(八)代码部分(使用.NET CompactFramework) 这个系列的翻译也拖了一段时间,现在决定一次性将它理清了.关于合并复制服务器的配置在前面的翻译文章中都已经详细地论述完了,现在终于到了订阅者是如何使用我们配制好的合并复制了.下面的代码是针对.NET CompactFramework的,其实整个合并复制的过程中,安装和配置占了95%的时间,而创建订阅仅仅需要5%的时间,合并复制的这个特征减小了我们敲代码时出现错误的几率,将更多地工作移植到了服

GCC 合并了我写的代码,从编译器开始解决安全问题

本文讲的是GCC 合并了我写的代码,从编译器开始解决安全问题,我在GCC上实现的trace-cmp功能正式成为GCC官方标准.Wish Wu是我的英文名. 我为什么想到去改GCC 需要介绍一下我自己和我的工作,我是来自蚂蚁金服巴斯光年实验室的安全研究员,主要负责Android操作系统本身的漏洞挖掘和漏洞的利用.Google的安全公告里可以找到我的名字https://source.android.com/security/bulletin/2015-08-01.过去我都是在不知道有没有漏洞的情况下

海阳顶端网进百度blog必须输入密码的vbscript代码_vbs

要看懂下面的代码,需要了解下面的函数vbscript strreverse 函数 返回字符串,此字符串与指定字符串顺序相反. strreverse(string1) string1 参数是要进行字符反向的字符串.如果 string1 是零长度字符串 (""),则返回零长度字符串.如果 string1 为 null,则会出现错误. 说明 下面的示例利用 strreverse 函数返回按相反顺序排列的字符串: dim mystr mystr = strreverse("vbscr

JSP中动态合并单元格的实例代码_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

03_Android项目中读写文本文件的代码

编写一下Android界面的项目 使用默认的Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.itheima28.writedata"     android:versionCode=&q