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