Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Удаление файлов по маске/размеру/времени изменения

Ответить
Настройки темы
VBS/WSH/JS - [решено] Удаление файлов по маске/размеру/времени изменения

Новый участник


Сообщения: 9
Благодарности: 2

Профиль | Отправить PM | Цитировать


Добрый день.
Сделал небольшой скрипт, который удаляет файлы в заданной папке по маске, размеру и времени изменения.
В начале скрипта указывается папка, в которой будут удалятся файлы и у меня не получается заставить его работать с несколькими папками.
Помогите пожалуйста научить скрипт брать имена папок из массива там, или из коллекции.
Скрипт корявый, собирался из нескольких примеров, т.к. сам я первый день с VBS работаю, прошу сильно не пинать.
Сам скрипт:
Код: Выделить весь код
Public objFSO
Folder = "c:\papka"
DeathLine = 14
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(Folder) Then
        Call ClrFolder(Folder)
        WScript.Echo "Готово."
Else
        WScript.Echo "Не найден путь " & Folder
End If
WScript.Quit 0

Function ClrFolder(strFolder)
Dim objFolder, objFile, objSubFolder
Set objFolder = objFSO.GetFolder(strFolder)
For Each objFile In objFolder.Files
	Datefile = objfile.DateLastModified
	DiffDate = DateDiff("d",Datefile,Now)
		if LCase(objFSO.GetExtensionName(File)) = "jpg" or _
		LCase(objFSO.GetExtensionName(File)) = "xls" then
		If DiffDate > DeathLine and _
		objFile.Size > 1048576 then objFile.Delete TRUE
'Next
For Each objSubFolder In objFolder.SubFolders
        Call ClrFolder(objSubFolder.Path)
Next
end if
next
end Function

Отправлено: 16:49, 09-07-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
arrFolders = Array("…", "…", "…")

For Each strFolder In arrFolders
    If objFSO.FolderExists(Folder) Then
    …
    …
Next
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:16, 09-07-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 9
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо!
Выкладываю рабочий вариант для нужд ищущих
Удаляет файлы в папках folder1,folder2,folder3, которые не редактировались более 7 дней, весят более 1мб и имеют формат jpg или xls.
Код: Выделить весь код
Public objFSO
arrFolders  = Array( _
   "c:\folder1", _
   "c:\folder2", _
   "c:\folder3")
DeathLine = 7
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each strFolder In arrFolders
If objFSO.FolderExists(strFolder) Then
        Call ClrFolder(strFolder)
        WScript.Echo "Папка "&strFolder&" очищена."
		Else
        WScript.Echo "Не найден путь " & strFolder
End If
next
WScript.Quit 0
Function ClrFolder(strFolder)
Dim objFolder, objFile, objSubFolder
Set objFolder = objFSO.GetFolder(strFolder)
For Each objFile In objFolder.Files
	Datefile = objfile.DateLastModified
	DiffDate = DateDiff("d",Datefile,Now)
		if LCase(objFSO.GetExtensionName(objFile)) = "jpg" or _
		LCase(objFSO.GetExtensionName(objFile)) = "xls" then
		If DiffDate > DeathLine and _
		objFile.Size > 1048576 then objFile.Delete TRUE

For Each objSubFolder In objFolder.SubFolders
        Call ClrFolder(objSubFolder.Path)
Next
end if
next
end Function

Отправлено: 19:56, 09-07-2012 | #3


Новый участник


Сообщения: 9
Благодарности: 2

Профиль | Отправить PM | Цитировать


Немного исправил код, перенес все переменные в начало и добавил удаление пустых директорий.
Код: Выделить весь код
Public objFSO
arrFolders  = Array( _
   "c:\folder1", _
   "c:\folder2", _
   "c:\folder3")
arrExt  = Array("doc","ods","odt","txt","db","xls","jpg","gif","png",)
DeathLine=60
FileByteSize=1024
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each strFolder In arrFolders
	If objFSO.FolderExists(strFolder) Then
        Call DelFiles(strFolder)
		Call DelEmptyFolders(strFolder)
			WScript.Echo "Папка "&strFolder&" очищена."
		Else
			WScript.Echo "Не найден путь " & strFolder
	End If
	next
WScript.Quit 0

Sub DelEmptyFolders(sFldr)
   Dim mDir, subDir, arDir

   Set mDir = objFSO.GetFolder(sFldr)
   Set subDir = mDir.SubFolders

   For Each arDir In subDir
     DelEmptyFolders arDir.Path
   Next

   If mDir.Size = 0 Then
      mDir.Attributes = 0
      mDir.Delete
   End If
End Sub

Sub DelFiles(sFldr)
	Dim mainDir, objFile, subDir,arDir
	Set mainDir = objFSO.GetFolder(sFldr)
	Set subDir = mainDir.SubFolders
	For Each objFile In mainDir.Files
		For Each arrFileExt in arrExt
		Datefile = objFile.DateLastModified
		DiffDate = DateDiff("d",Datefile,Now)
		if LCase(objFSO.GetExtensionName(objFile)) = arrFileExt then
		If DiffDate >= DeathLine and _
		objFile.Size > FileByteSize then objFile.Delete TRUE
		On Error Resume Next
		end if
	next
	next
	For Each arDir In subDir
		DelFiles arDir.Path
	Next
end Sub

Последний раз редактировалось nineline, 12-07-2012 в 15:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:27, 12-07-2012 | #4


Аватара для BigBoo

Старожил


Автор проектов


Сообщения: 474
Благодарности: 120

Профиль | Отправить PM | Цитировать


Подскажите, как удалить файл, когда известно только начало имени файла.

На рабочем столе есть ярлык CheMaxRus 12.5.lnk , начало имени файла CheMaxRus - неизменно, далее цифры могут быть любыми. Нужен на vbs аналог батника:
Код: Выделить весь код
del /q "%UserProfile%\Рабочий стол\CheMaxRus*"

Отправлено: 15:02, 20-09-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Попробуйте так:
Код: Выделить весь код
Option Explicit

Dim objFile


With WScript.CreateObject("VBScript.RegExp")
	.IgnoreCase = True
	.Pattern    = "^CheMaxRus.*\.lnk$"
	
	For Each objFile In WScript.CreateObject("Scripting.FileSystemObject").GetFolder(WScript.CreateObject("WScript.Shell").SpecialFolders.Item("Desktop")).Files
		If .Test(objFile.Name) Then
			objFile.Delete
		End If
	Next
End With

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:12, 20-09-2012 | #6


Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день, тему создавать не буду, думаю эта почти подходит.
Нужен скрипт который бы удалял в конкретной папке все папки, под папки, файлы кроме тех в название которые в начале стоит знак "!"
Если в начале названия корневой папки нет знака "!" но внутри этой папки есть подпапки или файлы со знаком "!" то корневую папку удалять не надо.

Отправлено: 08:36, 28-05-2015 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Удаление файлов по маске/размеру/времени изменения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Перемещение и удаление файлов по условию и маске VitHAK Скриптовые языки администрирования Windows 14 23-12-2013 08:57
CMD/BAT - [решено] Удаление файлов по маске во времменых папках IE Shpil83 Скриптовые языки администрирования Windows 16 25-05-2012 15:06
CMD/BAT - [решено] удаление файлов по маске имени hlpain Скриптовые языки администрирования Windows 4 02-09-2011 16:11
CMD/BAT - [решено] Удаление одинаковых файлов по размеру Arsenik77 Скриптовые языки администрирования Windows 27 08-08-2011 04:53
Delphi - Перемещение и удаление файлов по маске. Putin-mode Программирование и базы данных 1 21-06-2010 12:16




 
Переход