2010-02-16 2 views
0

이 코드는 시스템 파일 인 "Permission Denied"와 같은 보호 된 파일로 인해 잠시 후 중단됩니다.시스템 파일과 같은 보호 된 파일에서 스크립트가 중지됨

보호 된 파일을 처리하거나 무시할 수 있도록 아래 코드를 수정하는 방법이 있습니까?

Set objFS=CreateObject("Scripting.FileSystemObject") 
WScript.Echo Chr(34) & "Full Path" &_ 
Chr(34) & "," & Chr(34) & "File Size" &_ 
Chr(34) & "," & Chr(34) & "File Date modified" &_ 
Chr(34) & "," & Chr(34) & "File Date Created" &_ 
Chr(34) & "," & Chr(34) & "File Date Accessed" & Chr(34) 
Set objArgs = WScript.Arguments 
strFolder = objArgs(0) 
Set objFolder = objFS.GetFolder(strFolder) 
Go (objFolder) 
Sub Go(objDIR) 
    If objDIR <> "\System Volume Information" Then 
    For Each eFolder in objDIR.SubFolders 
     Go eFolder 
    Next  
    End If 
    For Each strFile In objDIR.Files 
     WScript.Echo Chr(34) & strFile.Path & Chr(34) & "," &_ 
     Chr(34) & strFile.Size & Chr(34) & "," &_ 
     Chr(34) & strFile.DateLastModified & Chr(34) & "," &_ 
     Chr(34) & strFile.DateCreated & Chr(34) & "," &_ 
     Chr(34) & strFile.DateLastAccessed & Chr(34) 
    Next 
End Sub 

그런 다음 명령 행이 같은 에서 호출.

c:\test> cscript //nologo myscript.vbs "c:\" > "C:\test\Output.csv" 

답변

0

과정을 확인 권한을 가지고있다. see

+0

은 결과를 알려줍니다. 건배 – MalsiaPro

0

당신이 오류를 무시하려는 코드의 일부 이전

On Error Resume Next 

을 추가하여 VBScript를에서 스크립트 오류를 ​​무시할 수 있습니다. 기본 동작을 복원하는

성명은

On Error GoTo 0 

단지 발언이다 : 방법들이 하나의 문장으로 표시하는 경우 괄호를 사용하지 않는 VB 및 VBScript로 호출합니다. 따라서 Go (objFolder) 줄은 Go objFolder으로 대체해야합니다.

+0

이 방법을 사용하여 오류를 무시하면 스킬 파일이 생기고 좋은 소리가 나지 않으면 모든 파일이 처리되었는지 확인해야합니다. 보호 여부와 상관없이 내가 RUNAS 명령을 사용하고 있지만 그 중 하나가 작동하지 않습니다. 어떤 제안들. – MalsiaPro

+0

어떤 OS를 사용하고 계십니까? Vista/Windows 7을 사용하는 경우 고도를 기준으로 스크립트를 실행하는 것을 잊지 마십시오. –

+0

@MalsiaPro 더 많은 제어를 원한다면 오류에 대한 Err 객체 만 필요합니다. 예 : * Err.Number = 70이면 * – Oorang

1

중복 된 질문에 따라 코드를 단순화했으며 오류를 처리하지 않고도 \ System Volume Information과 같은 하위 폴더 중 하나에 권한이없는 경우 objDIR.SubFolders이 실패합니다. 볼 수 있습니다! 폴더에 다른 메서드를 사용하여 폴더 이름을 열거하고 기존 경로와 결합한 다음 오류를 트랩해야합니다. 권한이 없으면 .GetFolder가 발생할 수 있습니다. (필자는 순간에 해당 솔루션을 코딩 할 시간이 없습니다.)

Option Explicit 

Dim objFS 
Dim objArgs 
Dim strFolder 
Dim objFolder 

Set objFS = WScript.CreateObject("Scripting.FileSystemObject") 
WScript.StdOut.WriteLine """Full Path"",""File Size""," & _ 
    """File Date modified"",""File Date Created""," & _ 
    """File Date Accessed""" 
Set objArgs = WScript.Arguments 
strFolder = objArgs(0) 
Set objFolder = objFS.GetFolder(strFolder) 
Go objFolder 
Sub Go(objDIR) 
    Dim strFile 
    On Error Resume Next 
    For Each eFolder in objDIR.SubFolders 
     Go eFolder 
    Next 
    For Each strFile In objDIR.Files 
     WScript.StdOut.WriteLine """" & strFile.Path & """,""" & _ 
      strFile.Size & """,""" & _ 
      strFile.DateLastModified & """,""" & _ 
      strFile.DateCreated & """,""" & _ 
      strFile.DateLastAccessed & """" 
    Next 
End Sub 
+0

+1 도움이 될 것입니다. – Smandoli

1

VBScript를 오류 트래핑 할 수 있습니다,하지만하지 우아 VBA로. 아래 스크립트를 사용해보십시오.

On Error Resume Next 
    '[ ... code ... ] 
Dim test_result, divisor 

divisor = 1  '' No error 
'divisor = 0  '' raise error #11 
'divisor = "zero" '' raise a different error 

test_result = 2/divisor 

If Err.Number = 11 then ''This line must appear at the point error is raised 
    MsgBox "Handled Error: " & Err.Description 
ElseIf Err.Number > 0 then 
    MsgBox "Error: " & Err.Number & " " & Err.Description 
    Err.Clear ''if you wanted to proceed clean from here 
End If 

MsgBox "Result: " & test_result