|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки |
|
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки
|
Новый участник Сообщения: 5 |
Профиль | Отправить 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 |
|
Отправлено: 13:39, 25-07-2009 |
Новый участник Сообщения: 11
|
Профиль | Сайт | Отправить PM | Цитировать Папка называется Obmen,в ней есть две папки, сканер и договора. Надо чтобы две этих папки были не затронуты,а все остальное скрипт удалял,файлы которые лежат в корне,а так же остальные папки с подкаталогами. т.е. применял рекурсию.
папка откуда надо удалять,задается bat файлом.в том варианте в котором у меня сейчас. |
Отправлено: 08:22, 20-10-2012 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Денис_Пузатков@vk:
Цитата Денис_Пузатков@vk:
Цитата Денис_Пузатков@vk:
или как они у Вас там на самом деле называются. |
|||
Отправлено: 11:23, 20-10-2012 | #42 |
Новый участник Сообщения: 11
|
Профиль | Сайт | Отправить PM | Цитировать On Error Resume Next
intDays = Int(Wscript.arguments.Item(0)) strFldr = Wscript.arguments.Item(1) Set objFSO = CreateObject("Scripting.FileSystemObject") DelOld strFldr, intDays Function DelOld(sFldr, iDays) On Error Resume Next 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.DateCreated, Now) > iDays Then WScript.Echo oI.Path oI.Attributes = 0 oI.Delete End If Next For Each oI In cD Select Case objFolder.Name Case "Сканер", "Сертификаты" Case Else DelOld oI.Path, iDays IF oI.Size = 0 Then oI.Delete End If End Select Next End Function не подскажете в чем дело,в таком виде скрипт не отрабатывает,из целевого католога удаляются файлы,но папки остаются... |
Отправлено: 19:41, 22-10-2012 | #43 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:48, 22-10-2012 | #44 |
Новый участник Сообщения: 11
|
Профиль | Сайт | Отправить PM | Цитировать On Error Resume Next intDays = Int(Wscript.arguments.Item(0)) strFldr = Wscript.arguments.Item(1) Set objFSO = CreateObject("Scripting.FileSystemObject") DelOld strFldr, intDays Function DelOld(sFldr, iDays) On Error Resume Next 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.DateCreated, Now) > iDays Then WScript.Echo oI.Path oI.Attributes = 0 oI.Delete End If Next For Each oI In cD Select Case objFolder.Name Case "Сканер", "Сертификаты" Case Else DelOld oI.Path, iDays IF oI.Size = 0 Then oI.Delete End If End Select Next End Function |
Отправлено: 21:03, 22-10-2012 | #45 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 00:15, 23-10-2012 | #46 |
Новый участник Сообщения: 11
|
Профиль | Сайт | Отправить PM | Цитировать Ничего не изменилось,так же удаляются только файлы...правда теперь если пробовать запустить сам скрипт,без bat. файла,стала появляться ошибка. Строка 2 символ 1 Индексы выходит за пределы допустимого диапазона.
|
Отправлено: 06:45, 23-10-2012 | #47 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Замечательно!
Теперь убираем второй «On Error Resume Next» из функции, добавляем требование обязательного предварительного объявления переменных «Option Explicit», добавляем объявления переменных, меняем «objFolder» на «oI», расставляем отступы для удобства чтения: и снова пробуем. |
Отправлено: 10:27, 23-10-2012 | #48 |
Новый участник Сообщения: 11
|
Профиль | Сайт | Отправить PM | Цитировать попробовал,файлы трет а папки в каталоге не удаляет....
|
Отправлено: 10:06, 24-10-2012 | #49 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Денис_Пузатков@vk:
|
|
Отправлено: 13:30, 24-10-2012 | #50 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|