VBScript批量提取文本文件数量值并求和的实现问题
解决VBScript多TXT文件数量求和问题
你的现有代码仅能处理单个文件,缺少多文件循环逻辑和求和累加变量,这是无法实现总和计算的核心原因。下面是修改后的完整代码,同时优化了容错处理:
' 初始化文件系统对象 Set objFSO = CreateObject("Scripting.FileSystemObject") ' 设置目标文件夹路径(替换成你的实际路径) Dim targetFolder targetFolder = "C:\Your\TXT\Files\Folder" Set folder = objFSO.GetFolder(targetFolder) ' 初始化求和变量,用于累计所有文件的数量 Dim totalQty totalQty = 0 ' 循环遍历文件夹内所有TXT文件 For Each File In folder.Files ' 只处理后缀为txt的文件 If LCase(objFSO.GetExtensionName(File.Name)) = "txt" Then Set oFile2 = objFSO.OpenTextFile(File.Path, 1) ' 1代表只读模式 Dim SSheet() i = 0 ' 读取文件所有行到数组 Do While Not oFile2.AtEndOfStream ReDim Preserve SSheet(i) SSheet(i) = oFile2.ReadLine i = i + 1 Loop oFile2.Close Set oFile2 = Nothing ' 提取指定位置的数量(数组索引30对应第31行) If UBound(SSheet) >= 30 Then Dim QtyTrim, QtyInt QtyTrim = Mid(SSheet(30), 6, 4) ' 先验证是否为有效数字,避免转换报错 If IsNumeric(QtyTrim) Then QtyInt = CInt(QtyTrim) totalQty = totalQty + QtyInt ' 累加数量到总和 WScript.Echo "文件 " & File.Name & " 提取数量: " & QtyInt Else WScript.Echo "文件 " & File.Name & " 第31行数量格式无效" End If Else WScript.Echo "文件 " & File.Name & " 行数不足31行,无法提取数量" End If End If Next ' 输出最终总和 WScript.Echo "所有文件的数量总和: " & totalQty Set folder = Nothing Set objFSO = Nothing
关键修改说明:
- 新增多文件遍历逻辑:通过
For Each File In folder.Files自动处理文件夹内所有TXT文件,无需固定数量 - 添加求和累加变量
totalQty:每次提取单个文件的数量后,直接累加到该变量中 - 增加容错判断:检查文件行数是否足够、提取内容是否为有效数字,避免脚本崩溃
- 修正原代码的对象销毁时机:原代码提前销毁了文件系统对象,导致后续循环无法执行
使用注意:
- 替换
targetFolder的值为你的TXT文件所在实际路径 - 确认每个TXT文件的第31行(数组索引30)确实包含数量值,且位置符合
Mid(SSheet(30),6,4)的设定(第6到第9个字符)
内容的提问来源于stack exchange,提问作者Muhnamana
相关产品推荐
相关产品推荐

