You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:45:05