2016-04-14 143 views
0

我已經跟着一些其他職位寫一個VBScript將計數/列表/移動/無論目錄中的所有文件夾或文件,我有一些工作但它有2個限制。VBScript找到#文件夾和文件(和子文件夾!)

1)它不會返回正確的數字(至少不會匹配Windows資源管理器)。 I.E.,我搜索我的C:\,當窗口探索停留時,它返回433個文件夾有+10,000(和一個子文件夾,C:\ Windows,返回2,234)!

2)即使我以管理員身份運行腳本,但在訪問各個位置的文件夾時,我有權限錯誤。

這裏有一個簡單的代碼,是因爲我在測試較小的文件夾,甚至有許多子文件夾,它會工作:

[Option Explicit 
'on error resume next 

Dim objFolder, objFSO, objSubFolder, iFolders 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

iFolders = 0 

Call CountFolders("C:\Windows") 

Sub CountFolders(strPath) 
    Set objFolder = objFSO.GetFolder(strPath) 
     For Each objSubFolder In objFolder.SubFolders 
       iFolders = iFolders + 1 
       If Right(iFolders, 2) = "00" Then 
        IF MsgBox(iFolders & " folders found so far.", VBOKCancel) = 2 Then 
         Wscript.quit 
        End If 
       End If 
       Call CountFolders(objSubFolder.Path) 
     Next 
End Sub 

msgbox(iFolders)] 

1 我只是推什麼樣的文件系統對象也離不開誰的極限遇到其他問題?

感謝

+0

我應該澄清一點,它會返回正確的數字或​​更少(它會遺漏一些),並且似乎只在存在非常大的文件夾結構(如我的整個C:\或Windows目錄)時纔會執行此操作。而且,它沒有錯誤。 – DrTarr

回答

0

是否是VBScript的?微軟已經將VBScript留下,並且任何新的腳本都應該用PowerShell來完成。

在PowerShell中:

$everything = get-childitem -path c:\ -recurse -force; 
$Foldercount = $everything|where-object{$_.psiscontainer}|measure-object |select-object -ExpandProperty count; 
$Filecount = $everything|where-object{-not $_.psiscontainer}|measure-object |select-object -ExpandProperty count; 

write-output "$Foldercount folders"; 
write-output "$Filecount files"; 

這裏做的事情:

  • 在C盤上收集一切
  • 計數多少個項是文件夾
  • 計數多少條目文件夾
  • 打印結果
+0

不,它不一定是,我可能會讓VBScript來使它工作,但想法是我有一些現有的腳本,如果這能夠適應,而不是從頭開始。也許是時候加快速度了,我會試試power shell選項。 – DrTarr

+0

我嘗試了PowerShell,它工作得很好(找到了33,000個文件夾,而不是433,這實際上比Windows資源管理器找到的要多),但它仍然存在許多錯誤,這些錯誤是持久性拒絕給管理員應該有權訪問的文件夾。如果有問題,我從管理員命令行運行腳本文件。 – DrTarr

相關問題