Страница: 1 |
|
Вопрос: VBS: Обход удаления используемых файлов
|
Добавлено: 20.01.10 11:33
|
|
Автор вопроса: Lnduk
|
В общем проблема следующая: есть момент в скрипте, который удаляет файлы и подпапки из заданной директории. Однако в ней могут находиться файлы, которые используются/открыты в настоящее время. Нужно, чтобы удалились только неиспользуемые, а блокируемые/используемые файлы он оставил.
Я новичок в VBS, поэтому использовал следующую конструкцию:
'uProf - заданная папка в которой необходимо произвести такую выборочную зачистку
If oFSO.FolderExists(uProf) = true then
oFSO.DeleteFolder uProf & "\*", 0
oFSO.DeleteFile uProf & "\*", 0
end if
Однако при нахождении используемого файла - выдается ошибка "разрешение отклонено". Как лучше сделать? Можно конечно прописать On Error Resume Next ... , но может есть изящнее варианты?
Ответить
|
Номер ответа: 1 Автор ответа: Шпион
ICQ: 250543104
Вопросов: 13 Ответов: 118
|
Профиль | | #1
|
Добавлено: 20.01.10 12:16
|
зря недооцениваешь возможности On Error Resume Next
рекомендую гуглить в сторону
Err.Clear
Err.Number
Err.Description
Ответить
|
Номер ответа: 2 Автор ответа: Шпион
ICQ: 250543104
Вопросов: 13 Ответов: 118
|
Профиль | | #2
|
Добавлено: 20.01.10 12:24
|
Кстати, раз уж пошла такая резня бензопилой:
Думаю - разберешься
Такая конструкция точно сработает. Если не нужны дополнительные проверки файла - удалишь. Ну и On Error Resume Next тоже напишешь если понадобится
strFolder="c:\Windows\temp"
If right(strFolder,"\" ="\" Then strFolder=left(strFolder,len(strFolder)-1)
Set objFSO=Createobject("Scripting.Filesystemobject"
Set objFolder=objFSO.GetFolder
Set objFiles=objFolder.Files
For Each objFile In objFiles
a=split(ucase(objFile. Name), "."
strExtension=a(ubound )
strFileName=ucase(Left(objFile. Name,len(objFile. Name)-len(strExtension))
If strExtension=".TMP" Then objFSO.DeleteFile strFolder & "\" & objFile. Name, True
Next
Ответить
|
Номер ответа: 5 Автор ответа: Lnduk
Вопросов: 1 Ответов: 2
|
Профиль | | #5
|
Добавлено: 27.01.10 09:16
|
блин, есть проблема, написал следующее:
-
- IF oFSO.FolderExists(arrTMPflds(i)) = true then
- oFSO.DeleteFolder arrTMPflds(i) & "\*", 0
- Set oFolder=oFSO.GetFolder(arrTMPflds(i))
- Set oFiles=oFolder.Files
- For Each oFile In oFiles
- On Error Resume Next
- oFSO.DeleteFile arrTMPflds(i) & "\" & oFile.Name, 0
- Next
- END IF
Все вроде работает, однако появилось 2 момента:
1. - oFSO.DeleteFolder arrTMPflds(i) & "\*", 0
- удаляет не полностью, если в подпапках имеются используемые файлы - остается вся папка, плюс к этому далеко не все папки удаляются хотя там все хорошо... Почему?
2. - oFSO.DeleteFile arrTMPflds(i) & "\" & oFile.Name, 0
- тоже удаляются не все файлы, хотя не используются и все разрешения есть (аттрибуты чистые).
Ответить
|
Номер ответа: 6 Автор ответа: Шпион
ICQ: 250543104
Вопросов: 13 Ответов: 118
|
Профиль | | #6
|
Добавлено: 27.01.10 09:35
|
давай проверим. создай папку C:\TEMP
в ней файл с произвольным именем
подпапку 123, внутри файл aaa
подпапку 321, внутри файл bbb
после этого скопируй скрипт, выполни и посмотри результаты выполнения в папке C:\TEMP
On Error Resume Next
strFolder="C:\TEMP"
Set objFSO=Createobject("Scripting.Filesystemobject"
Set objFolder=objFSO.GetFolder(strFolder)
Set objFiles=objFolder.Files
For Each objFile In objFiles
objFSO.DeleteFile strFolder & "\" & objFile. Name, True
Next
For Each objSubFolder In objFolder.SubFolders
Wscript.Echo objSubFolder. Name
objFSO.DeleteFolder strFolder & "\" & objSubFolder. Name
Next
будут вопросы - пиши письма
Ответить
|
Страница: 1 |
Поиск по форуму