Страница: 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 | 
 
		
			Поиск по форуму