统计CSV文件行数的VB Script运行无报错但不生效问题求助
VBScript批量统计同目录CSV行数问题修复
你提供的代码存在以下几处逻辑错误导致无法达到预期效果:
- 变量名冲突:外层遍历文件用的
objFile对象在循环内部被重复赋值为打开的文本文件对象,直接破坏了外层遍历逻辑,导致遍历异常中断。 - 结果文件未排除:最终输出的
FileRecordCount.csv本身也是CSV格式,会被脚本纳入统计范围,覆盖正常统计逻辑。 - 写入模式错误:每次统计完一个文件都用
ForWriting覆盖模式打开结果文件,每次写入都会清空之前的内容,最终只会保留最后一条统计结果。 - 写入内容错误:待写入的文件名调用了结果文件的名称,而非当前正在统计的CSV文件名称。
- 冗余交互阻塞:
WScript.Echo语句在双击运行VBS时会弹出模态提示框,用户未手动点击确认的话,脚本会一直卡在执行状态。
以下是修正后的可正常运行的代码:
Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") vbsFile = Wscript.ScriptName vbsFilePath = Wscript.ScriptFullName sFolder = left(vbsFilePath, len(vbsFilePath) - (len(vbsFile) + 1)) ResultsFile = sFolder & "\FileRecordCount.csv" ' 预先创建/清空结果文件,写入表头 Set objResultFile = objFSO.OpenTextFile(ResultsFile, ForWriting, True) objResultFile.WriteLine "文件名,行数" objResultFile.Close ' 追加模式打开结果文件 Set objResultFile = objFSO.OpenTextFile(ResultsFile, ForAppending, True) For Each objFile In objFSO.GetFolder(sFolder).Files ' 排除结果文件本身 If UCase(objFSO.GetExtensionName(objFile.Name)) = "CSV" And objFile.Path <> ResultsFile Then Set objReadFile = objFSO.OpenTextFile(objFile.Path, ForReading) RowCount = 0 Do Until objReadFile.AtEndOfStream ' 移除弹窗阻塞,如需调试可恢复 ' WScript.Echo objReadFile.ReadLine objReadFile.ReadLine RowCount = RowCount + 1 Loop objReadFile.Close ' 写入当前统计的文件名和对应行数,加双引号避免文件名带逗号时格式错乱 objResultFile.WriteLine """" & objFile.Name & """," & RowCount End If Next objResultFile.Close MsgBox "FileRowCount Complete"
修正后脚本会自动跳过结果文件本身,遍历同目录下所有其他CSV文件统计行数,最终将所有结果统一写入FileRecordCount.csv。
内容的提问来源于stack exchange,提问作者sdf
相关产品推荐
相关产品推荐

