2016-08-05 24 views
1

システムのドライブの1つにあるすべてのディレクトリ(フォルダ)を、空であるかどうか、またはExcelファイルに含めずにリストするvbscriptを作成しています。私はドライブのフォルダの場所を渡すとうまくいくが、ドライブの場所全体を渡すと「permission denied!code-800A0046」と表示される。これは、アクセス許可が必要なシステムボリューム情報などの隠しフォルダが存在するためです。そのようなフォルダをすべてスキップするか、そのようなフォルダにアクセスする方法を探しています。これをどのように達成するのですか? 以下は私のスクリプトです:私のvbscriptにアクセス権のないフォルダをスキップするにはどうすればいいですか?

If Not WScript.Arguments.Named.Exists("elevate") Then 
    CreateObject("Shell.Application").ShellExecute WScript.FullName _ 
    , WScript.ScriptFullName & " /elevate", "", "runas", 1 
    WScript.Quit 
End If 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Workbooks.Add 
objExcel.Visible = True 
intRow = 1 
Set FSO = CreateObject("Scripting.FileSystemObject") 
For Each objFolder In FSO.GetFolder("C:\").SubFolders 
    if ((objFolder.Attributes = 0) OR (objFolder.Attributes AND 1)) then 
     ShowSubFolders objFolder 
    End If 
Next 

Sub ShowSubFolders(Folder) 
    For Each Subfolder in Folder.SubFolders 
    if ((Subfolder.Attributes = 0) OR (Subfolder.Attributes AND 1)) then 
     If Subfolder.Size = 0 Then 
      objExcel.Cells(intRow,1) = SubFolder.Path 
      objExcel.Cells(intRow,2) = "Empty" 
      intRow = intRow + 1 
     Else 
      objExcel.Cells(intRow,1) = SubFolder.Path 
      objExcel.Cells(intRow,2) = "Not Empty" 
      intRow = intRow + 1 
      End If 
    End If 
    Next 
End Sub 
Set FSO = nothing 

最初の5行は、コード上昇権/権限を付与することになっているが、それはどちらか助けていないようです。

+0

あなたの最初の5 linessスクリプトを与える[管理者権限](https://msdn.microsoft.com/en-US/library/windows/desktop/ms717801(V = vs.85).aspx)。 'System Volume Information'にアクセスするには、[SYSTEM](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684190(v = vs.85).aspx)にする必要があります。それらをスキップする簡単かつ迅速な方法は、 'On Error Resume Next'です。アクセスを許可するということは、所有権を取得することを意味します...そうしたくはありません。 – Clijsters

答えて

0

コメントありがとうございます@Clijsters。それは本当に助けになりました。

On Error Resume Next 

実際に私が探していたものです。

私は(この質問に関する限り)私がしたいことを完了しました。以下は、将来の参照のための私のコードです:

On Error Resume Next 
' Giving the script administrator privileges 
If Not WScript.Arguments.Named.Exists("elevate") Then 
    CreateObject("Shell.Application").ShellExecute WScript.FullName _ 
    , WScript.ScriptFullName & " /elevate", "", "runas", 1 
    WScript.Quit 
End If 

'creating an excel application object 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Workbooks.Add 
intRow = 1 
objExcel.Cells(intRow,1) = "Folder Path" 
objExcel.Cells(intRow,2) = "Empty or Not" 
intRow = intRow + 2 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set colDrives = FSO.Drives 
For Each objDrive in colDrives 
    For Each objFolder In FSO.GetFolder(objDrive.RootFolder).SubFolders 
     ShowSubFolders objFolder 
    Next 
Next 

'Function to determine whether a folder is Empty or not and enter its path in an excel 
Sub ShowSubFolders(Folder) 
    For Each Subfolder in Folder.SubFolders 
     If Subfolder.Size = 0 Then 
      objExcel.Cells(intRow,1) = Subfolder.Path 
      objExcel.Cells(intRow,2) = "Empty" 
      intRow = intRow + 1 
     Else 
      objExcel.Cells(intRow,1) = Subfolder.Path 
      objExcel.Cells(intRow,2) = "Not Empty" 
      intRow = intRow + 1 
     End If 
    Next 
End Sub 
Set FSO = Nothing 
objExcel.Activeworkbook.SaveAs("EmptyFolders.xlsx") 
objExcel.Visible = True 
+0

答えをくれてありがとう!ご存知のように、回答者は追加の質問やコメント作成者との会話のための回答ではありません。特定のコメント投稿者の注意を引く場合は、コメントに返信してください。 – halfer

関連する問題