У меня есть скрипт 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, и я не мог проверить это, так что без небольших исправлений это может не работать, просто напечатал это, чтобы объяснить свою идею)