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
我是新手,正在寻找 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