'许可被拒绝'计算文件时出错

时间:2015-05-15 15:22:17

标签: vbscript count directory

我试图使用VBS计算(递归)文件夹中的文件数。

我已经派生了以下函数,但无论何时运行它我都会收到错误 -

  

800A0046 - 许可被拒绝

这种情况发生在我希望知道文件数的所有文件夹上,所有文件夹都是本地文件夹或我可以完全访问的映射驱动器。

我已经传递了带有和不带斜杠的文件夹路径,但仍然会出现错误。

有谁能告诉我如何解决这个问题?

Function CountFiles(ByVal folder)

    Dim parentFolder
    Dim subFolder
    Dim count

    '** Grab an instance of the current parent folder *'
    Set parentFolder = FSO.GetFolder(folder)

    '** Count the files in the parent folder *'
    count = parentFolder.Files.Count

    '** Count all files in each subfolder - recursion point *'
    For Each subFolder In parentFolder.SubFolders
        count = count + CountFiles(subFolder.Path)
    Next

    '** Return a count of the files *'
    CountFiles = count

End Function

1 个答案:

答案 0 :(得分:0)

通过从David的代码中删除危险的脂肪(大量引入变量(如IntCount),虚假后退(文件夹对象)和第四个(folder.Path)),您将获得一个干净的功能:

Option Explicit

Const csFolder = ".\"

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")

Function CountFiles(oFolder)
    CountFiles = oFolder.Files.Count
    Dim oSubFolder
    For Each oSubFolder In oFolder.SubFolders
        CountFiles = CountFiles + CountFiles(oSubFolder)
    Next
End Function

WScript.Echo "Files in", csFolder, CountFiles(goFS.GetFolder(csFolder))

可以对此进行测试(例如,在" \"):

cscript 30263200.vbs
Files in .\ 146

并检查了资源管理器显示的文件夹的属性(相信我,146个文件是正确的。)

如果你得到'#34;权限被拒绝"对于某些其他文件夹,树中至少有一个您无权访问的文件夹。如果全部 您感兴趣的起始文件夹导致此错误,您没有任何的权限。

由于有权授予权限,这可能是一件好事。

考虑向dir /s /b发送消息,它会为您提供您有权知道的所有文件夹/文件的列表,而不会中断是否存在任何被禁止的文件夹/文件。