我试图使用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
答案 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
发送消息,它会为您提供您有权知道的所有文件夹/文件的列表,而不会中断是否存在任何被禁止的文件夹/文件。