Ошибка VBS — отказано в разрешении при удалении файлов

#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. Отличный ответ.