Ich habe ein VBS-Skript, das alles aus dem Startmenü löscht und es von Grund auf neu hinzufügt. Ich verwende es als Anmeldeskript in einer Domäne. Letzte Woche habe ich jedoch festgestellt, dass einige Benutzer andere Anwendungen verwenden und diese Anwendungen sich nicht auf einer zentralen Freigabe befinden. Meine Frage ist daher, ob es möglich ist, bestimmte Ordner von der Löschung aus diesem Skript auszuschließen.
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
Bearbeiten:Typen stimmen nicht überein?
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
Antwort1
Für mehrere Bedingungen können Sie beispielsweise ein Array und eine Schleife verwenden, um alle zu überprüfen:
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
(Ich habe mehr Erfahrung mit VBA und konnte es auch nicht testen, also funktioniert es möglicherweise nicht ohne kleine Korrekturen, habe es nur eingetippt, um meine Idee zu erklären)