VBSスクリプトでフォルダーを除外する


0

スタートメニューからすべてを削除し、ゼロから再び追加する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

2
確かにそれは可能です。しかし、このスクリプトを作成した場合は、その方法も知っておく必要があります。これは無料のスクリプトサービスではないことに注意してください。
マテジュハス

フォルダの名前を配列に追加します。次に、削除する前に、配列内の文字列がSubFoldersに含まれている場合は削除しないで、それぞれを繰り返します!:)
デイブ

同僚が設定した組織を殺すことは、確かに彼らをあなたのようなものにします。そもそもなぜこれをしているのですか?それは良いアプローチだと確信していますか?すべてのセットアップで独自のショートカットを管理すべきではありませんか?
セス

@MátéJuhászよくこれは私が今まで試したことです。ただし、除外を追加するだけで、この方法では1つのフォルダーしか除外できないと思います。変数は複数の文字列を持つことができるとは思わないからです。しかし、私はそれほど優れたコーダーではありません。
ディランRz

あなたは宣言したexcludeFolderが、使用exclFolder:(。
メイトユハス

回答:


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の経験が豊富で、テストすることもできなかったので、小さな修正なしでは機能しない可能性があります。私のアイデアを説明するために入力するだけです)


DBSの動作はVBSでは少し異なりますが、次のForeachでも同じです。しかし、例外で型の不一致エラーが発生し続けます。
ディランRz

エラーはどこで発生しますか?
メイトユハス

At the Exception(0)など
ディランRz

appDataLocationその時点ですでに価値を持っていますか?
マテユハス

それははいobjShell.ExpandEnvironmentStrings("%APPDATA%")
ディランRz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.