Скрипт для удаления старых файлов и папок из определенной папки
Здравствуйте! Помогите пожалуйсто создать скрипт для удаления старых файлов и папок старше n - дней из определенной папки.
Нашел такой скрипт который удаляет старые файлы из корневого каталога, а как переделать его так что б он удалял все папки и файлы старше n - дней незнаю. Если кто то сможет помочь заранее огромное спаибо !!!!!!!!!!! Пример скрипта: Код:
RunForFiles "C:\Test\" 'файлы, среди которых будет производиться поиск устаревших, лежат в этой директории |
Цитата:
Код:
intDays = Int(Wscript.arguments.Item(0)) Код:
CScript MyScript.VBS 14 C:\TEST |
Да действительно данный скрипт удаляет только файлы и только в папке C:\Test, а надо переделать так что б удалял все что есть в папке C:\Test.
|
Цитата:
Код:
intDays = Int(Wscript.arguments.Item(0)) Код:
CScript MyScript.VBS 14 C:\TEST |
Цитата:
|
Цитата:
Код:
MyScript.VBS 14 C:\TEST |
Большое спасибо! Если не затруднит можно добавить коментарии?
|
avfiga, комментарии только усложнят читаемость, не в обиду - код и без того прозрачен... хотя, если очень нужно, могу сделать построчный разбор
|
amel27,
Спасибо за труды. Меня тоже заинтересовал данная тема. Если не затруднит, ответь на пару вопросов: 1.Этот скрипт удаляет файлы и папки основываясь только на дату создания или дата последнего изменения тоже играет для него роль? 2.А как будет обрабатываться объект если каталог подпадает под удаление (т.е. создан раньше), а файл в этом каталоге нет (т.е. создан позже)? |
Anton04,
1. ".DateLastModified" - дата изменения, для удаления по дате создания заменить на ".DateCreated" 2. Сначала удаляются файлы, каталог удаляется если окажется пустым (будут удалены все файлы/подкаталоги) |
amel27,
Спасибо, возьмём на заметку :clapping: Ограничений по вложенности каталогов нет? (ну окрамя тех, что присуствуют в операционной и файловой системе) С русскими именами тоже проблем не будет? Я так понимаю, что саму головную папку (в примере это папка test) скрипт не трогает? Как обстоят дела со скрытыми файлами и папками. И файлами с атрибутом только для чтения (удаляет/пропускает)? P.S. А вот если бы он ещё создавал лог файл с неудалёнными файлами и папками (после его работы), ну вооще сказка была-бы :angel: ах мечты, мечты... |
Anton04, немного изменил - с удалением защищенных атрибутами и выводом удаляемых файлов:
Код:
intDays = Int(Wscript.arguments.Item(0)) Код:
cscript //Nologo MyScript.VBS 14 C:\TEST >MyScript.Log |
amel27,
Ещё раз спасибо. :oszone: |
amel27, спасибо за скрипт
Меня интересует вопрос, а если в папке test есть скрытая папка с ограничением доступа, как сделать так чтоб он не выкидывал ошибку а пропускал её? |
Sempl2, самое постое - добавить в начало скрипта:
Код:
On Error Resume Next Код:
' oI.Attributes = 0 |
amel27, ошибку не выкидывает, но удалять не продолжает скрипт заканчивает работу на этой папке.
Можно как то сделать чтоб он пропускал её и продолжал удалять? |
Цитата:
Цитата:
|
amel27, у меня общая папка находится под DFSom, а он создает внутри папку "DfsrPrivate" на нее ограничен доступ и удалять её нельзя. Вот и надо как то сделать чтоб все старые файлы и папки чистил, а её пропускал.
|
Sempl2, попробуй поставить строки "On Error Resume Next" в ДВА места:
- первой строкой скрипта - первой строкой функции DelOld (сразу после строки "Function DelOld") |
amel27,
Спасибо большое все получилось :yahoo: |
Вот готовое решение, которое у меня выполняется через MS SMS 2003 для очистки каталогов временных папок на компьютерах пользователей.
Переменной, отвечающей за время устаревания файла является PurgeTime. В данный момент удаляются все файлы, которые старше 14 дней. Код:
'==== Script Information Header ==== |
Данный скрипт удаляет только файлы, а пустые папки остаются?
|
avfiga, он удаляет и старые файлы и папки, если они пустые.
if oSubFolder.Size = 0 then oFSO.DeleteFolder oSubFolder.path |
Может не в тему, но всёже отпишу, искал способ удалить файлы в папке которые старше X дней, и наткнулся на утилитку forfiles.exe входящию в набор Recourse kit, с помощью её можно легко добится этих целей. К примеру
Цитата:
|
как добавить задание forfiles.exe в планировщик? не получается...
|
Цитата:
|
Здравствуйте, скажите а можно ли переделать этот код так что бы он удалял только скрытые файлы и перед каждым удалением спрашивал удалить файл или нет?
дата создания файла не важна. |
POOLEET,
Код:
StrSource ="F:\[ Coding ]\del_hidden" ' проверяемая директория Вариант сценария на языке Jscript расположен в разделе: Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Javascript Удаление скрытых файлов » post #2 ________________________________________________________________________ |
Цитата:
User variables System variables я их меняю, а в скрипте прописаны конкретные пути к этим папкам, т.е. скрипт на изменение User variables и System variables не смотрит... В крайнем случае, как можно указать конкретную папку, к примеру E:\Temp |
Ребята, а можно в этом запросе:
Код:
forfiles.exe /p %temp% /s /m *.* /d -14 /c "cmd /c del /q /f @file" |
Цитата:
ОС win 2003 права Админ, скрипт создаю с расширением vbs , где можно посмотреть лог работы скрипта |
Цитата:
|
Добрый день. А можно в данный скрипт внести изменении чтобы не удалялись пара каталогов с данными из папки?
Точнее, произвожу очистку папки данным скриптом, в папке есть пара папок которые оттуда перенести нельзя,можно ли видоизменить скрипт таким образом,чтобы при срабатывании он их не трогал,заранее спасибо за ответ… |
Цитата:
Болванка кода: Код:
Select Case objFolder.Name Цитата:
|
Прошу прошения что не указал какой именно...Вот этот
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.DateLastModified, Now) > iDays Then oI.Delete Next For Each oI In cD DelOld oI.Path, iDays If oI.Size = 0 Then oI.Delete Next End Function если нетрудно,не могли бы вы вставить данный кусок кода в приведенный мной скрипт...спасибо.. |
Код:
For Each oI In cD |
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 "Test" Case Else DelOld oI.Path, iDays If oI.Size = 0 Then oI.Attributes = 0 oI.Delete End If End Select Next End Function Задача следующая из папки надо раз в неделю удалять все файлы,кроме двух определенных папок и того что в них находиться. Запускается скрипт bat файлом со следующим содержанием cscript //Nologo MyCleanUp.VBS 1 D:\test >MyCleanupScript.Log Попробовал в таком виде,из корня каталога файлы удаляются, но папки с файлами находящиеся в том же каталоге нет. Что не так? |
Цитата:
Цитата:
Цитата:
|
Еще раз извиняюсь за глупые вопросы, ибо в данном вопросе плаваю. Test -это название одной из папок как ра.з
|
|
Папка называется Obmen,в ней есть две папки, сканер и договора. Надо чтобы две этих папки были не затронуты,а все остальное скрипт удалял,файлы которые лежат в корне,а так же остальные папки с подкаталогами. т.е. применял рекурсию.
папка откуда надо удалять,задается bat файлом.в том варианте в котором у меня сейчас. |
Цитата:
Цитата:
Цитата:
Код:
Case "сканер", "договора" |
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 не подскажете в чем дело,в таком виде скрипт не отрабатывает,из целевого католога удаляются файлы,но папки остаются... |
|
Код:
On Error Resume Next |
Угум.
Начните с того, что удалите или закомментируйте строку: Код:
On Error Resume Next |
Ничего не изменилось,так же удаляются только файлы...правда теперь если пробовать запустить сам скрипт,без bat. файла,стала появляться ошибка. Строка 2 символ 1 Индексы выходит за пределы допустимого диапазона.
|
Замечательно!
Теперь убираем второй «On Error Resume Next» из функции, добавляем требование обязательного предварительного объявления переменных «Option Explicit», добавляем объявления переменных, меняем «objFolder» на «oI», расставляем отступы для удобства чтения: и снова пробуем. |
попробовал,файлы трет а папки в каталоге не удаляет....
|
Цитата:
|
Да остаются.
|
|
нет не старше....посмотрел внимательней,одна папка пустая есть
|
Цитата:
|
У меня непонятка со скриптом. Он должен удалять файлы в сети в папках с русскими именами и с пробелами, но не делает этого, выдает ошибку. Говорят раньше он работал. Писал его не я, да и особо в этом не разбираюсь.
Собственно сам скрипт: Код:
'Производит поиск устаревших файлов и удаляет файлы старше 50 дней |
Цитата:
|
Цитата:
Так ... А как сделать так , чтоб в этих Case "Папка1", "Папка2", "Папка3" , данные удалялись ... а сами папки нет ? |
Чтобы не удалялись пустые папки, закомментируйте строку
Код:
If oI.Size = 0 Then oI.Delete Добиться данным скриптом корректной работы, чтобы данные удалялись, а папки — частично удалялись, частично нет, не получится. Ибо автором был изначально выбран неверный путь ориентации на размер папки при удалении (правильный путь — проверка количества вложенных папок и файлов). |
для файлов:
Код: Код:
intDays = Int(Wscript.arguments.Item(0)) Код:
CScript MyScript.VBS 14 C:\TEST Особенно второй аргументы. Меня интересует если в названии папки присутствует пробел. например C:\Program Files\ он правильно примет аргументы ? Или нужно будет указать "C:\Program Files\" ? |
Цитата:
Код:
cscript.exe //nologo "Путь\MyScript.VBS" "C:\TEST TEST TEST" Цитата:
Код:
cscript.exe //nologo "Путь\MyScript.VBS" "C:\Program Files" |
Цитата:
|
Здравствуйте, можете мне кто нито помочь? Ситуация такая, нужен скрипт или программка которая будет удалять вложенные папки с файлами из рабочей директории. То есть имеется сервер на котором делается бэкап, (e:/backup) в этой директории создается папка с датой создания>туда копируется дамп базы, и после этого он в ней архивируется в rar архив. Но есть одно но, иногда дамп снимается с ошибками и он не архивируется или недоорхивируется, нужно что бы скрипт проверял перед удалением папки, что бы всегда в директории оставалась последний актуальный бэкап. (По хорошему завершению бэкапа, в папке с датой остается один файл Export.rar, если что то не так в папке много файлов).
|
artem_cher, хорошо бы изложить то же самое, но по-русски.
|
Добрый день!
Подниму старую тему)! Необходимо для этой части кода Код:
intDays = Int(Wscript.arguments.Item(0)) Спасибо! |
Цитата:
Код:
If oI.Size = 0 Then oI.Delete Код:
intDays = 1 |
Добрый день, нужен скрипт или программа, ну или другое решение для следующей ситуации: IP камера записывает видеофайлы и файлы log в расшаренную папку на одном из компов в сети, данные файлы записываются в папку имеющую название в виде даты, в ней создаются папки с названием равным текущем времени, в данные папки соответственно записываются видеозаписи и файлы лог. Требуется, чтобы раз в 3-4 дня удалялась самая старая папка (места на диске мало и когда оно кончается, видео перестает писаться). Также, хотелось бы, чтобы из общей папки, где создаются все эти файлы и папки удалялись файлы *.log (эти файлы создаются, когда камера фиксирует движение и их достаточно много).
Может ли кто помочь в решении данного вопроса? |
Подскажите, пожалуйста можно ли автоматизировать вот это действие:
Windows7, в которой 20 пользователей, раз в неделю нужно на каждой из них почистить папки - C:\Users\userNNN\AppData\Local\Temp для каждого пользователя(имя пользователей в формате user_NNN) |
Dimu4, можно.
|
У меня была вот такая мысль - создать cmd файл, в нем
Код:
forfiles.exe /p %temp% /s /m *.* /d -14 /c "cmd /c del /q /f @file" Может есть еще подсказки/идеи? Спасибо |
Например, назначьте групповой политикой на Logout пользователям:
Скрытый текст
Код:
Option Explicit |
Здравствуйте, господа.
Во-первых, хочу поблагодарить за данные скрипты, особенно за: Код:
On Error Resume Next Сейчас для выполнения вышеозначенного кода я использую для очистки папки "Загрузки" вот такую команду: Код:
cscript //Nologo c:\scripts\MyCleanUp.VBS 30 %USERPROFILE%\Downloads > c:\scripts\MyCleanupScript_Downloads.Log "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" Значение параметра: {374DE290-123F-4565-9164-39C4925E467B} Можно ли дополнить команду запуска, либо сам скрипт так, чтобы путь к папке "Загрузки" подставлялся автоматически из реестра, а ещё лучше, что-то типа: Код:
cscript //Nologo c:\scripts\MyCleanUp.VBS 30 c:\scripts\ПапкиДляОчистки.list > c:\scripts\MyCleanupScript.Log Код:
%temp% |
скажите, есть папка в которой создаються автоматически подпапки с файлами, которые нужно что бы удалялись все файлы старее 1 часа по дате изменения каждого файла, какой скрипт будет, что бы он работал сам без перезапусков, планировщиков и т.д., например с таймером в тот же самый один час.
|
Время: 14:58. |
Время: 14:58.
© OSzone.net 2001-