VBS 스크립트에서 폴더 제외

VBS 스크립트에서 폴더 제외

시작 메뉴에서 모든 항목을 삭제하고 처음부터 다시 추가하는 VBS 스크립트가 있습니다. 나는 이것을 도메인의 로그온 스크립트로 사용합니다. 하지만 지난주에 어떤 사람들은 다른 응용 프로그램을 사용하고 해당 응용 프로그램은 중앙 공유에 있지 않다는 것을 깨달았습니다. 따라서 제 질문은 이 스크립트에서 특정 폴더를 삭제에서 제외할 수 있느냐는 것입니다.

Dim objShell, strCmd, intRunError, strFolder, objFileSys

Set objShell = CreateObject( "WScript.Shell" )
appDataLocation=objShell.ExpandEnvironmentStrings("%APPDATA%")


Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(appDataLocation & "\Microsoft\Windows\Start Menu\Programs")

' delete all subfolders and files
For Each f In folder.SubFolders
   On Error Resume Next
   name = f.name
   f.Delete True
Next

' delete all files in root folder
for each f in folder.Files
   On Error Resume Next
   name = f.name
   f.Delete True
Next

Set objFileSys = CreateObject("Scripting.FileSystemObject")
objFileSys.GetFolder("\\test\dfstest\Start Menu\programs").Copy appDataLocation & "\Microsoft\Windows\Start Menu\Programs"
Set objFileSys = Nothing

편집하다:유형이 일치하지 않습니까?

Dim objShell, strCmd, intRunError, strFolder, objFileSys
Dim Exceptions()
Dim Exception
Dim i

Set objShell = CreateObject( "WScript.Shell" )
appDataLocation=objShell.ExpandEnvironmentStrings("%APPDATA%")


Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(appDataLocation & "\Microsoft\Windows\Start Menu\Programs")

Exception(0) = appDataLocation & "\Microsoft\Windows\Start Menu\Programs\Access 2013"
Exception(1) = appDataLocation & "\Microsoft\Windows\Start Menu\Programs\Cameleon"  

For Each sf in MyFolder.SubFolders
    Exception = False
    For i = LBound(Exceptions) to UBound(Exceptions)
        If lCase(sf.Path) = lCase(Exceptions(i)) Then
            Exception = True
            Exit For
        End If
    Next
    If Not Exception Then
        deleteSubFolders
        sf.Delete
    End If
Next

Public Sub deleteSubFolders(byRef MyFolder, exclFolder)
    Dim sf
    For Each sf in MyFolder.SubFolders
        If not (lCase(sf.Path) = lCase(exclFolder)) Then
            deleteSubFolders sf, exclFolder
            sf.Delete
        End If
    Next
End Sub

' delete all files in root folder
for each f in folder.Files
   On Error Resume Next
   name = f.name
   f.Delete True
Next

Set objFileSys = CreateObject("Scripting.FileSystemObject")
objFileSys.GetFolder("\\test\dfstest\Start Menu\programs").Copy appDataLocation & "\Microsoft\Windows\Start Menu\Programs"
Set objFileSys = Nothing

답변1

여러 조건의 경우 배열 및 루프를 사용하여 모든 조건을 확인할 수 있습니다.

Dim Exceptions(10) as String
Dim Exception as Boolean

Exception(0)= appDataLocation & "\Microsoft\Windows\Start Menu\Programs\Access 2013"
Exception(1)=...
...
Exception(9)=...

...

For Each sf in MyFolder.SubFolders
    Exception = False
    For i = LBound(Exceptions) to UBound(Exceptions)
        If lCase(sf.Path) = lCase(Exceptions(i)) Then
            Exception = True
            Exit For
        End If
    Next i
    If Not Exception Then
        deleteSubFolders sf, exclFolder
        sf.Delete
    End If
Next sf

(저는 VBA에 대한 경험이 더 많고 테스트도 할 수 없었기 때문에 약간의 수정 없이는 작동하지 않을 수도 있습니다. 그냥 제 아이디어를 설명하기 위해 입력했습니다)

관련 정보