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

VBscript:循环遍历文件夹中的所有文本文件,删除每个文件的第一行和最后一行,并合并到一个文件中,vbscript,Vbscript,我是一名新手,正在寻找一种在vb脚本中执行以下操作的方法: 我在一个特定文件夹(C:\data)中有几个文本文件,我想循环浏览所有文本文件,删除每个文本文件的第一行和最后一行,然后将所有文件合并到一个文本文件中。 非常感谢你的帮助。提前谢谢 以下是我在数小时的网络阅读/搜索后写的内容(但它以一个无休止的循环结束): Const ForReading=1 设置objFSO=CreateObject(“Scripting.FileSystemObject”) Set folder=objFSO.Ge

我是一名新手,正在寻找一种在vb脚本中执行以下操作的方法: 我在一个特定文件夹(C:\data)中有几个文本文件,我想循环浏览所有文本文件,删除每个文本文件的第一行和最后一行,然后将所有文件合并到一个文本文件中。 非常感谢你的帮助。提前谢谢

以下是我在数小时的网络阅读/搜索后写的内容(但它以一个无休止的循环结束):

Const ForReading=1
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
Set folder=objFSO.GetFolder(“C:\data\”)
Set outFile=objFSO.CreateTextFile(“C:\data\out\testout.txt”)
对于文件夹.Files中的每个文件
如果lcase(objFSO.getExtensionName(file.path))=“txt”,则
设置testfile=objFSO.OpenTextFile(file.path,ForReading)
直到testfile.AtEndOfStream

如果testfile.Line始终使用
选项explicit
语句。这样做有助于揭示语法和逻辑上的错误

以下是一些代码改进提示:

  • 涉及行计数器(请参见
    linecount
  • IsEmpty
    函数返回一个布尔值,指示变量是否已初始化。你是说空字符串吗
  • 注意并思考
    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
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(".\28507073.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

textstream有一个行计数器(.line),因此linecount是第五个轮子;循环前应跳过第一行;不写入最后一行的策略相同。
if not Trim(line)=“”,那么outFile.WriteLine(line)
仍然是循环中应该避免的if(和Trim()),特别是因为它将删除第一行和最后一行之间的空行(不在规范中)。顺便说一句:@trospe对IsEmpty()的使用是完全正确的。@Ekkehard.Horner Ad
IsEmpty()
:同样正确,但对于每个
循环,仅针对
中的第一个文件。启动第二个文件结果为
false
,因此前一个文件的最后一行将写入输出。广告空行:很久以前用一个不同的字符串(参见edit2)来“解决”,但现在我看到了更好的解决方案:
设置line=Nothing
而不是
line=unlikestring
,并测试
如果不是IsObject(line),则是
而不是
如果不是line=unlikestring,则是

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(".\28507073.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