VBscript:循环遍历文件夹中的所有文本文件,删除每个文件的第一行和最后一行并合并为一个文件

VBscript: Loop through all text files in a folder, delete the first and last line of each file and merge into one file

我是新手,正在寻找 vb 脚本中的方法来执行以下操作: 我在特定文件夹 (C:\data) 中有几个文本文件,我想遍历所有文本文件,删除每个文本文件的第一行和最后一行,然后 combine/merge 所有文件到一个文本文件中. 非常感谢您的帮助。提前致谢。

以下是我在 reading/searching 网络(但它以无休止的循环结束)几个小时后到目前为止所写的内容:

Const ForReading = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set folder = objFSO.GetFolder("C:\data\")
Set outFile = objFSO.CreateTextFile("C:\data\out\testout.txt")

for each file in folder.Files

if lcase(objFSO.getExtensionName(file.path))="txt" then

Set testfile = objFSO.OpenTextFile(file.path, ForReading)


Do Until testfile.AtEndOfStream
  If testfile.Line <= 1 Then
    testfile.SkipLine
  Else
    if Not IsEmpty(line) Then outFile.WriteLine(line)
    line = testfile.ReadLine
  End If
Loop

testfile.Close

End If

next

outFile.Close

始终使用 option explicit 语句。这样做也有助于揭示语法和逻辑中的错误。

这里有一些代码改进提示:

  • 涉及行计数器(参见linecount)。
  • IsEmpty函数returns一个布尔值,表示一个变量是否已经初始化。您是说 空字符串 吗?
  • 注意并思考 line = "" 个语句。

但是,下一个代码片段可以工作。但是可以按预期工作吗?

Set testfile = objFSO.OpenTextFile(file.path, ForReading)
line = ""
linecount = 1           ' or 0 ?
Do Until testfile.AtEndOfStream
  If linecount <= 1 Then
    testfile.SkipLine
    line = ""
  Else
    if Not Trim(line) = "" Then outFile.WriteLine(line)
    line = testfile.ReadLine
  End If
  linecount = linecount +1
Loop
testfile.Close

根据Ekkehard.Horner的评论编辑(谢谢):

  • 他是对的 5th wheel:),
  • 他是对的,第一行跳过,
  • 最后一行不会写入,因为.ReadLine成功输出写入

所以代码片段可以如下:

Set testfile = objFSO.OpenTextFile(file.path, ForReading)
line = ""
if not testfile.AtEndOfStream then testfile.SkipLine
Do Until testfile.AtEndOfStream
    if Not Trim(line) = "" Then outFile.WriteLine(line)
    line = testfile.ReadLine
Loop
testfile.Close

Edit2: 保留空行

Set testfile = objFSO.OpenTextFile(file.path, ForReading)

set line=Nothing

if not testfile.AtEndOfStream then testfile.SkipLine
Do Until testfile.AtEndOfStream
    if Not IsObject(line) Then outFile.WriteLine(line)
    line = testfile.ReadLine
Loop
testfile.Close

根据

编辑

我无法在评论中添加的内容:

type 28507073.vbs
Option Explicit

Dim tsIn : Set tsIn = CreateObject("Scripting.FileSystemObject").OpenTextFile(".507073.txt")
If tsIn.AtEndOfStream Then
   WScript.Echo "Empty file"
Else
   tsIn.SkipLine
   If Not tsIn.AtEndOfStream Then
      Dim s : s = tsIn.ReadLine()
      Do Until tsIn.AtEndOfStream
         WScript.Echo s
         s = tsIn.ReadLine()
      Loop
   End If
End If
tsIn.Close

type 28507073.txt
1
2
3
4

cscript 28507073.vbs
2
3