#vbscript
#vbscript
Вопрос:
Я пишу простой скрипт для удаления всех текстовых файлов из каталога «Мои документы». Скрипт работает нормально, но после удаления последнего файла он выдает отказ в разрешении (код ошибки: 800A0046). Например, если у меня в каталоге 3 файла .txt, ошибка возникает после удаления 3-го файла. Я не думаю, что это проблема с разрешением, потому что в этом случае ни один файл не был бы удален. Это что-то очень простое, чего мне не хватает. Я добавил 1-секундную задержку, которая позволяет мне видеть, как файлы удаляются один за другим. Вот сценарий:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFolder = CreateObject("Wscript.Shell").specialfolders("MyDocuments")
Dim objFile
For each objFile in objFolder.Files
If LCase(objFSO.GetExtensionName(objFile.name)) = "txt" Then
objFSO.DeleteFile(objFile), True
Wscript.Sleep 1000
End If
Next
Комментарии:
1. И в какой строке этого скрипта возникает ошибка «Отказано в разрешении»? Потому
800A0046
что это не ошибка, которую вы получите при отказе в доступе к файловой системе. Я подозреваю, что либо ваш пример здесь и ваш фактический сценарий отличаются, и ошибка возникает в какой-то строке, которую вы не показываете, либо, возможно, ошибка где-то в коде, который вызывает этот скрипт.
Ответ №1:
Вы должны изменить эту строку, чтобы установить objFolder :
objFolder = CreateObject("Wscript.Shell").specialfolders("MyDocuments")
Для
Set objFolder = objFSO.GetFolder(CreateObject("Wscript.Shell").SpecialFolders("MyDocuments"))
И вот быстрый тест, чтобы перечислить все мои текстовые файлы в папке «Мои документы» :
Option Explicit
Dim objFSO,objFile,objFolder,MyDoc,F
Set objFSO = CreateObject("Scripting.FileSystemObject")
MyDoc = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments")
Set objFolder = objFSO.GetFolder(MyDoc)
For each objFile in objFolder.Files
If LCase(objFSO.GetExtensionName(objFile.name)) = "txt" Then
F = F amp; objFile amp; vbcrlf
End If
Next
wscript.echo F
Комментарии:
1. Отличный ответ.