VBS统计C盘文件夹时定义数组UBound为0,求代码修正方案
错误原因
- VBS中
Array()函数的作用是传入初始元素生成数组,arr = Array(i)的实际效果是创建了只有1个元素的数组,元素值为变量i的值(19),这是UBound(arr)始终返回0的核心原因。 - 要创建指定长度的数组,需使用
ReDim关键字定义数组的上下界,VBS默认数组下标从0开始,要存储i个元素时上界应为i-1。
修正后代码
set wshell = createobject("WScript.Shell") dim fso,file,subfolder,folder Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.CreateTextFile("\\192.168.0.201\thang\Learning\test.txt") Set folder = fso.GetFolder("C:\") dim i,j i = 0 j = 0 For Each subfolder In folder.SubFolders 'file.WriteLine """" & subfolder.path & """" 'VBS输出带双引号内容的写法 i=i+1 Next msgbox "i = " & i '示例中C盘根目录有19个子文件夹,此处返回19 dim arr ReDim arr(i-1) '修正:声明长度为i的数组,下标范围从0到i-1 For Each subfolder In folder.SubFolders 'file.WriteLine """" & subfolder.path & """" '如果需要写入文件可放开该注释 arr(j) = subfolder.path j=j+1 Next ' 测试数组元素 msgbox arr(0) msgbox arr(1) msgbox "lbound = " & lbound(arr) '默认返回0 msgbox "ubound = " & ubound(arr) '返回18,对应数组总长度为19 file.close()
补充说明
如果需要数组下标从1开始,可以在脚本最开头添加Option Base 1,对应的数组声明改为ReDim arr(i)即可。
内容的提问来源于stack exchange,提问作者thangvc91
相关产品推荐
相关产品推荐

