VBScript获取文件夹及子文件信息时报Object required错误如何解决
VBScript报错修复及语法说明
核心报错原因
- 参数调用顺序错误:在判断
WScript.Arguments.Count > 0之前就调用Arg(0),无参数传入时会直接因索引不存在抛出"Object required"错误 - 变量赋值规则错误:
FolderPath是普通字符串变量,VBScript中只有对象类型变量赋值需要加Set关键字,普通变量直接赋值即可,Set FolderPath = Arg(0)属于语法错误 - 过程定义位置错误:VBScript不允许将
Sub/Function等过程定义放在If、For等控制结构内部,你将ShowSubFolders定义写在If判断块内属于语法错误 - 变量名冲突:递归过程
ShowSubFolders的参数名为Folder,过程内部又重新对Folder变量赋值,会覆盖参数值导致递归逻辑异常
修复后的可运行代码
已同步添加文件大小、创建日期的输出逻辑:
Dim fso, Arg, FolderPath, Exists Dim Folder, colFiles, objFile ' 过程定义必须放在脚本最外层,不能嵌套在控制结构中 Sub ShowSubFolders(Folder) Dim Subfolder, colFiles, objFile For Each Subfolder in Folder.SubFolders Wscript.Echo "=== 子目录:" & Subfolder.Path & " ===" Set colFiles = Subfolder.Files For Each objFile in colFiles Wscript.Echo "文件名:" & objFile.Name & ",大小:" & objFile.Size & "字节,创建时间:" & objFile.DateCreated Next Wscript.Echo ShowSubFolders Subfolder Next End Sub Set fso = CreateObject("Scripting.FileSystemObject") Set Arg = WScript.Arguments ' 优先判断参数是否存在,再读取参数值 If Arg.Count = 0 Then WScript.Echo "错误:未传入文件夹路径参数" WScript.Quit 1 End If ' 普通变量赋值无需加Set FolderPath = Arg(0) WScript.Echo "待遍历路径:" & FolderPath If fso.FolderExists(FolderPath) Then Set Folder= fso.GetFolder(FolderPath) Wscript.Echo "=== 根目录:" & Folder.Path & " ===" Set colFiles = Folder.Files For Each objFile in colFiles Wscript.Echo "文件名:" & objFile.Name & ",大小:" & objFile.Size & "字节,创建时间:" & objFile.DateCreated Next Wscript.Echo ShowSubFolders Folder Else Wscript.Echo "错误:文件夹不存在" End If
VBScript 正确If结构说明
VBScript的If判断只有两种合法写法:
单行写法(无需写End If)
If 判断条件 Then 满足条件执行的语句 Else 不满足条件执行的语句多行写法
If 判断条件1 Then 条件1满足时执行的语句块 ElseIf 判断条件2 Then 条件2满足时执行的语句块 Else 所有条件都不满足时执行的语句块 End If
注意:多分支判断的关键字是ElseIf(连写),如果拆成Else If需要额外补充对应的End If做匹配,否则会报语法错误
内容的提问来源于stack exchange,提问作者Abraham Zinala
相关产品推荐
相关产品推荐

