Это мой первый пост, и я новичок в написании сценариев. Вместо того, чтобы биться головой о стену, пока я, наконец, не понял, я решил зарегистрироваться здесь и попросить о помощи, поскольку я часто использую этот сайт при поиске ответов.
Я пытаюсь написать 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