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

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

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

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


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

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


Здравствуйте! Помогите пожалуйсто создать скрипт для удаления старых файлов и папок старше n - дней из определенной папки.
Нашел такой скрипт который удаляет старые файлы из корневого каталога, а как переделать его так что б он удалял все папки и файлы старше n - дней незнаю.

Если кто то сможет помочь заранее огромное спаибо !!!!!!!!!!!

Пример скрипта:

Код: Выделить весь код
RunForFiles "C:\Test\" 'файлы, среди которых будет производиться поиск устаревших, лежат в этой директории

Function RunForFiles(folderspec)
   Dim fso, f, f1, fc

   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
WScript.Echo (folderspec & f1.name) 'вывод сообщения с именем файла, который будет удален. используется в тестовых целях, в рабочем скрипте нужно отключить
      If CompareDate(folderspec & f1.name) = True Then Log(folderspec & f1.name)
'DelFile(folderspec & f1.name) 'удалить файл. сейчас удаление отключено для отладки.
   Next
End Function

'***************************************************************
'Возвращает True, если дата создания файла больше 14-ти дней
Function CompareDate(strFileName)
   Dim fso, f, s, i
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(strFileName)

   i = DateDiff("d", f.DateCreated, Now)

   If i > 14 Then 'здесь указывается количество дней, которое используется для сравнения с датой создания файла, т.е., в этом примере удаляются все файлы, созданные раньше, чем 14 дней назад
      'WScript.Echo(strFileName&" "&i) 'вывести имя файла и его возраст, используется для отладки
      CompareDate = True
   Else
      CompareDate = False
   End If
End Function

'****************************************************************
'функция для извлечения пути
Function ExpandPath(strFullFileName)
   ExpandPath = Left(strFullFileName,instrrev(strFullFileName,"\"))
End Function

'***************************************************************
Function DelFile(strFullFileName)
Dim fso, F
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set F = fso.GetFile(strFullFileName)
   F.Delete
End Function

'****************************************************************
'функция для создания log-файла. он создается рядом со скриптом, имя - дата запуска скрипта.
Function Log(strLineToLog)
   Const ForReading = 1, ForWriting = 2
   Dim fso, f, r, FileLog
   r = ""

   FileLog = Left(WScript.ScriptName,(Len(WScript.ScriptName)-4)) & "_" & DatePart("yyyy",Date) & "_" & DatePart("m",Date) & "_" & DatePart("d",Date) & "." & "log"
   Set fso = CreateObject("Scripting.FileSystemObject")

   If (fso.FileExists(FileLog)) Then
      Set f = fso.OpenTextFile(FileLog, Forreading, True)
      r = f.Readall
      f.Close
      Set f = fso.OpenTextFile(FileLog, ForWriting, True)
      f.Write strLineToLog & vbCrLf & r
      f.Close
   Else
      Set f = fso.OpenTextFile(FileLog, ForWriting, True)
      f.Write strLineToLog
      f.Close
   End If
End Function
Этот скрипт удалит в указанной папке все файлы, которые были созданы 14 и больше дней назад.

Отправлено: 13:39, 25-07-2009

 

Аватара для Anton04

Ветеран


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

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


amel27,

Спасибо, возьмём на заметку

Ограничений по вложенности каталогов нет? (ну окрамя тех, что присуствуют в операционной и файловой системе)
С русскими именами тоже проблем не будет?
Я так понимаю, что саму головную папку (в примере это папка test) скрипт не трогает?
Как обстоят дела со скрытыми файлами и папками. И файлами с атрибутом только для чтения (удаляет/пропускает)?

P.S. А вот если бы он ещё создавал лог файл с неудалёнными файлами и папками (после его работы), ну вооще сказка была-бы ах мечты, мечты...

-------
Слабый всю жизнь идёт лёгкой дорогой, черта сильного выбрать трудный путь.
Будь осторожен в своих желаниях, ибо они иногда сбываются.


Отправлено: 13:23, 27-07-2009 | #11



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

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


Googler


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

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


Anton04, немного изменил - с удалением защищенных атрибутами и выводом удаляемых файлов:
Код: Выделить весь код
intDays = Int(Wscript.arguments.Item(0))
strFldr = Wscript.arguments.Item(1)

Set objFSO = CreateObject("Scripting.FileSystemObject")
DelOld strFldr, intDays

Function DelOld(sFldr, iDays)
   Dim oD, cF, cD, oI

   Set oD = objFSO.GetFolder(sFldr)
   Set cF = oD.Files
   Set cD = oD.SubFolders

   For Each oI In cF
      If DateDiff("d", oI.DateLastModified, Now) > iDays Then
         WScript.Echo oI.Path
         oI.Attributes = 0
         oI.Delete
      End If
   Next

   For Each oI In cD
      DelOld oI.Path, iDays
      If oI.Size = 0 Then
         oI.Attributes = 0
         oI.Delete
      End If
   Next
End Function
пример запуска:
Код: Выделить весь код
cscript //Nologo MyScript.VBS 14 C:\TEST >MyScript.Log
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:51, 27-07-2009 | #12


Аватара для Anton04

Ветеран


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

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


amel27,

Ещё раз спасибо.

-------
Слабый всю жизнь идёт лёгкой дорогой, черта сильного выбрать трудный путь.
Будь осторожен в своих желаниях, ибо они иногда сбываются.


Отправлено: 17:55, 27-07-2009 | #13


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


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

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


amel27, спасибо за скрипт
Меня интересует вопрос, а если в папке test есть скрытая папка с ограничением доступа, как сделать так чтоб он не выкидывал ошибку а пропускал её?

Отправлено: 18:53, 12-08-2009 | #14


Googler


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

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


Sempl2, самое постое - добавить в начало скрипта:
Код: Выделить весь код
On Error Resume Next
P.S. при этом команды сброса атрибутов нужно удалить или закомментировать:
Код: Выделить весь код
'         oI.Attributes = 0

Отправлено: 01:57, 13-08-2009 | #15


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


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

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


amel27, ошибку не выкидывает, но удалять не продолжает скрипт заканчивает работу на этой папке.
Можно как то сделать чтоб он пропускал её и продолжал удалять?

Отправлено: 09:46, 13-08-2009 | #16


Googler


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

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


Цитата Sempl2:
удалять не продолжает скрипт заканчивает работу на этой папке »
понятно...
Цитата Sempl2:
если в папке test есть скрытая папка с ограничением доступа »
гм... чет я загрузился... если с файлами понятно: атрибут стоит - пропускаем, нет - удаляем, а как быть с папками - пропускать ВСЁ содержимое?.. или атрибуты проверять только на папках?.. кстати, у меня VBS ругается только на атрибут RO, остальные никак не мешают удалению.

Отправлено: 11:17, 13-08-2009 | #17


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


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

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


amel27, у меня общая папка находится под DFSom, а он создает внутри папку "DfsrPrivate" на нее ограничен доступ и удалять её нельзя. Вот и надо как то сделать чтоб все старые файлы и папки чистил, а её пропускал.

Отправлено: 11:40, 13-08-2009 | #18


Googler


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

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


Sempl2, попробуй поставить строки "On Error Resume Next" в ДВА места:

- первой строкой скрипта
- первой строкой функции DelOld (сразу после строки "Function DelOld")

Отправлено: 12:42, 13-08-2009 | #19


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


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

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


amel27,
Спасибо большое все получилось

Отправлено: 15:38, 13-08-2009 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Помогите найти скрипт для удаленного удаления програм magwolf Скриптовые языки администрирования Windows 20 01-02-2016 23:35
Любой язык - нужен скрипт для удаления всех файлов кроме нужных для запуска Windows XP Dark Ange1 Скриптовые языки администрирования Windows 11 07-03-2010 13:34
[решено] Скрипт для удаления нужных слов в ini файле Pozia AutoIt 23 27-10-2009 18:42
CMD/BAT - [решено] Создание CMD/BAT файла для удаления лишних папок Vsirf Скриптовые языки администрирования Windows 4 04-06-2009 20:37
Скрипт для удаления директорий dallas Программирование и базы данных 5 15-01-2003 19:28




 
Переход