Сравните имена файлов папок с массивом - PullRequest
1 голос
/ 02 марта 2020

Это мой первый пост, и я новичок в написании сценариев. Вместо того, чтобы биться головой о стену, пока я, наконец, не понял, я решил зарегистрироваться здесь и попросить о помощи, поскольку я часто использую этот сайт при поиске ответов.

Я пытаюсь написать vbscript, который сравнивает все имена файлов в данной папке с массивом, который содержит «одобренные» имена файлов для этой папки. Если имя файла в папке не совпадает ни с одним из имен в массиве, то он должен удалить файл в папке. Мой сценарий, кажется, сравнивается просто отлично, но когда он находит файл, который не соответствует, он, кажется, хочет удалить последнее проверенное имя файла, а не имя файла, которое не соответствует. Вот что у меня есть. Ваш вклад будет принята с благодарностью. Спасибо.

Есть 12 "приемлемых" имен файлов. 4 имени файла с 3 разными расширениями.


    DIM objFSO, objUser, userName, strFolder, objFolder, objFiles, sigTxt1, sigTxt2, sigTxt3, 
    sigCust, sigExt1, sigExt2, sigExt3

    SET objFSO = CreateObject("Scripting.FileSystemObject")
    SET objUser = CreateObject("WScript.Network")
    userName = objUser.UserName
    strFolder = "C:\Users\" & userName & "\AppData\Roaming\Microsoft\Signatures\"
    SET objFolder = objFSO.GetFolder(strFolder)
    SET objFiles = objFolder.files
    sigTxt1 = "FSignature"
    sigTxt2 = "PSignature"
    sigTxt3 = "PWSignature"
    sigExt1 = ".htm"
    sigExt2 = ".rtf"
    sigExt3 = ".txt"
    sigCust = "CustomSignature"
    DIM SigName
    SigName=Array(sigTxt1 & sigExt1, sigTxt1 & sigExt2,  sigTxt1 & sigExt3, sigTxt2 & sigExt1, sigTxt2 &
    sigExt2, sigTxt2 & sigExt3, sigTxt3 & sigExt1, sigTxt3 & sigExt2, sigTxt3 & sigExt3, 
    sigCust & sigExt1, sigCust & sigExt2, sigCust & sigExt3)

    DIM i, sigFoldFile, sigArrName, sName1, sName2, noMatch
    i = 1
    noMatch = "True"
    DO WHILE i  0 THEN
            noMatch = "True"
            wscript.echo "Match = NO" & vbNewline & sname1 & "  " & sName2 & vbNewline & "noMatch = " & 
    noMatch
        ELSE
            noMatch = "False"
            wscript.echo "Match = YES" & vbNewline & sname1 & " = " & sName2 & vbNewline & "noMatch = " & 
    noMatch
            EXIT FOR
        NEXT
    If noMatch = "True" THEN
        wscript.echo "Deleteing file " & sName2
    '   objFSO.DeleteFile sName2
    END IF
    i = i + 1
    wscript.echo i               'temporary line for checking that value of i
    NEXT
    LOOP

Обновление У меня это работает сейчас. Спасибо всем. Я выложу сценарий на случай, если он поможет другим. Я понял, что моя строка objFSO.DeleteFile должна включать strFolder, чтобы был указан полный путь. Я также добавил переменную подсчета файлов, поскольку число «<» в операторе «DO WHILE i <13» не может быть числом stati c. Это связано с тем, что количество файлов в папке пользователя может быть больше или меньше. </p>


    Option Explicit
    DIM objFSO, objUser, userName, strFolder, objFolder, objFiles, sigTxt1, 
    sigTxt2, sigCust, sigExt1, sigExt2, sigExt3
    SET objFSO = CreateObject("Scripting.FileSystemObject")
    SET objUser = CreateObject("WScript.Network")
    userName = objUser.UserName
    strFolder = "C:\Users\" & userName & 
    "\AppData\Roaming\Microsoft\Signatures\"
    SET objFolder = objFSO.GetFolder(strFolder)
    SET objFiles = objFolder.files
    sigTxt1 = "FSignature"
    sigTxt2 = "PSignature"
    sigCust = "CustomSignature"
    sigExt1 = ".htm"
    sigExt2 = ".rtf"
    sigExt3 = ".txt"
    DIM SigName
    SigName=Array(sigTxt1 & sigExt1, sigTxt1 & sigExt2,  sigTxt1 & sigExt3, 
    sigTxt2 & sigExt1, sigTxt2 & sigExt2, sigTxt2 & sigExt3, sigCust & 
    sigExt1, sigCust & sigExt2, sigCust & sigExt3)
    '------------------------------------------LINE 19
    DIM f, i, j, sigFoldFile, sigArrName, sName1, sName2, noMatch
    f = objFolder.Files.count
    i = 1
    j = f + 1
    DO WHILE i < j
    FOR EACH sigFoldFile in objFiles
        noMatch = "True"
        sName2 = sigFoldFile.Name
        FOR EACH sigArrName in SigName
            sName1 = sigArrName
        IF sName2 <> sName1 THEN
            noMatch = "True"
        ELSE
            noMatch = "False"
            EXIT FOR
        END IF
        NEXT
    IF noMatch = "True" THEN
        wscript.echo "Deleteing file " & sName2
        sigFoldFile.Attributes = 0
        objFSO.DeleteFile strFolder & sName2
    END IF
    i = i + 1
    NEXT
    LOOP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...