Vbscript 对象不支持此属性或方法:oFldr.GetFolder

Vbscript 对象不支持此属性或方法:oFldr.GetFolder,vbscript,Vbscript,在我的代码中,这个函数一直出现错误 Function Recurse(oFldr) If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then For Each oSubFolder In oFldr.SubFolders Recurse oSubFolder 'For Each oFile In oFldr.Files For Each oFile I

在我的代码中,这个函数一直出现错误

Function Recurse(oFldr)
    If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then
        For Each oSubFolder In oFldr.SubFolders
            Recurse oSubFolder

            'For Each oFile In oFldr.Files  
            For Each oFile In oFldr.Files

                If LCase(oFSO.GetExtensionName(oFile)) = "txt" Then
                    ContentSearchTxt(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "doc" Or "docx" Then
                    ContentSearchWord(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "xls" Or "xlsx" Then
                    ContentSearchExcel(oFile)
                End If
            Next
        Next
    End If
End Function
该错误似乎是在我的第一个
if语句中抛出的

If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then
我对使用VBS真的很陌生,想知道是否有人能把我推向正确的开始方向?

是FileSystemObject的一种方法。所以改变

If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then

So的定义是什么

Set oFSO = CreateObject("Scripting.FileSystemObject")

问题可能是传递给此函数的参数

函数递归之前(oFldr)

同样,当以这种方式调用函数时,不需要If语句

每个oSubFolder上的“下一个”位于错误的位置

此外,您的“或”语句中也有错误。这里是一个修改后的函数版本,注释掉了If和End If。OR语句也已修改。您不能简单地使用或指定一个不同的值,您必须创建一个或另一个条件,而不仅仅是另一个值

这是函数的修改版本。鉴于此函数没有返回值,我还建议您将其更改为子例程,如下所示:

Sub Recurse(oFldr)
    'If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then
        For Each oSubFolder In oFldr.SubFolders
            Recurse oSubFolder
        Next

            'For Each oFile In oFldr.Files  
            For Each oFile In oFldr.Files

                If LCase(oFSO.GetExtensionName(oFile)) = "txt" Then
                    ContentSearchTxt(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "doc" Or LCase(oFSO.GetExtensionName(oFile)) = "docx" Then
                    ContentSearchWord(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "xls" Or LCase(oFSO.GetExtensionName(oFile)) ="xlsx" Then
                    ContentSearchExcel(oFile)
                End If
            Next

    'End If
End Sub

谢谢你的回复。当我这样做时,我会收到另一个错误,说
需要对象:'oFldr'
。是否要将oFldr的所有实例都更改为oFSO的所有实例?我觉得情况并非如此,因为oFSO的
不支持
.Files
@scapegoat17-不,只需做我最后提到的一个更改。(或者使用你可能有的FSO)上述错误是否与其他原因有关?像在那个位置找不到文件一样?@scapegoat17-
需要对象:“oFldr”
的意思是:
oFldr
不是对象。根据您开始使用的代码,我怀疑您已将参数的名称更改为函数。这是我在使用函数之前所做的操作:
Set of so=CreateObject(“Scripting.FileSystemObject”)
Set of ldr=of so.GetFolder(StartDir)
递归(oFldr)
递归(oFSO.GetFolder(sSearchRoot))
我已经对您所说的做了以下操作,但是我仍然收到一个错误,上面写着
objectrequired:'oFldr'
。有什么想法吗?谢谢,我现在明白了,并在我自己的电脑上测试了它,还发现了代码中的其他问题。我已经用我的发现更新了我的答案。顺便说一句,你不能这样做:
如果LCase(of so.GetExtensionName(oFile))=“xls”或“xlsx”
。每个
子句必须是一个完整的表达式。更好的实现可能是使用
Select Case
语句。然后您可以列出每个扩展名。例如:
选择Case LCase(oFSO.GetExtensionName(oFile))
,然后列出您的案例语句:
案例“doc”、“docx”
案例“xls”、“xlsx”
,等等。
案例
语句只允许您提供您试图匹配的值。
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFldr = oFSO.GetFolder("C:\Root_Dir_To_Recurse")
Recurse oFldr
Sub Recurse(oFldr)
    'If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then
        For Each oSubFolder In oFldr.SubFolders
            Recurse oSubFolder
        Next

            'For Each oFile In oFldr.Files  
            For Each oFile In oFldr.Files

                If LCase(oFSO.GetExtensionName(oFile)) = "txt" Then
                    ContentSearchTxt(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "doc" Or LCase(oFSO.GetExtensionName(oFile)) = "docx" Then
                    ContentSearchWord(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "xls" Or LCase(oFSO.GetExtensionName(oFile)) ="xlsx" Then
                    ContentSearchExcel(oFile)
                End If
            Next

    'End If
End Sub