Войти

Показать полную графическую версию : [решено] Удаление файлов меньше определенного размера


XXXp
12-02-2011, 15:37
Нужен простенький скриптик.. Есть папка, допустим с:\papka, нужно чтобы скрипт удалял в ней все файлы меньшие по размеру чем 9кб. Плюс, если это возможно удалял все файлы в данной папке, независимо от размера, дата создания которых старше чем 6 дней от текущей даты.
И второй скрипт нужен, он тоже простой. копировать все файлы из папки c:\papka в папку c:\papka2
Вообще, можно их объединить, чтобы первым действием скрипт удалял все файлы меньше 9кб по размеру(и старше 6 дней созданные), а затем копировал оставшиеся в папку2

Заранее огромное спасибо

Ivan Bardeen
12-02-2011, 17:56
Вот, VBS скрипт

DeathLine = 6
Folder = "c:\papka"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Folder)
Set colFiles = objFolder.Files

For Each objFile in colFiles
Datefile = objfile.DateCreated
DiffDate = DateDiff("d",Datefile,Now)
WScript.Echo DiffDate
If DiffDate > DeathLine Then
objfile.Delete(TRUE)
Else If objfile.Size < 9216 Then
objfile.Delete(TRUE)
Else
objFSO.CopyFile objFile.Path, "c:\papka2\"
End If
End If
Next

XXXp
12-02-2011, 23:56
Спасибо!
Только два момента:
1. Почему-то выскакивает окно с цифрой 0 и единственной кнопкой Ок по поводу каждого файла, нельзя ли его не отображать, а то когда 200 файлов не очень удобно
2. Измените пожалуйста копировать на вырезать, я неправильно выразился.

Спасибо!

OSArev
13-02-2011, 01:23
Только два момента:
1. Почему-то выскакивает окно с цифрой 0 и единственной кнопкой Ок по поводу каждого файла, нельзя ли его не отображать, а то когда 200 файлов не очень удобно
2. Измените пожалуйста копировать на вырезать, я неправильно выразился. »

DeathLine = 6
Folder = "c:\papka"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Folder)
Set colFiles = objFolder.Files

For Each objFile in colFiles
Datefile = objfile.DateCreated
DiffDate = DateDiff("d",Datefile,Now)
' WScript.Echo DiffDate
If DiffDate > DeathLine Then
objfile.Delete(TRUE)
Else If objfile.Size < 9216 Then
objfile.Delete(TRUE)
Else
objFSO.MoveFile objFile.Path, "c:\papka2\"
End If
End If
Next

XXXp
13-02-2011, 02:06
Спасибо, то, что нужно!
Только теперь обнаружил, не удаляет файлы, созданные позднее 6 дней до текущей даты, т.е. переносит их как подходящие под условия...

Ivan Bardeen
14-02-2011, 09:52
Только теперь обнаружил, не удаляет файлы, созданные позднее 6 дней до текущей даты, т.е. переносит их как подходящие под условия... »
хм... скрипт удаляет файл, если он старше 6 дней ИЛИ меньше 9Kb - остальные перемещает.
А что не так?
вот же ваше условие:
нужно чтобы скрипт удалял в ней все файлы меньшие по размеру чем 9кб. Плюс, если это возможно удалял все файлы в данной папке, независимо от размера, дата создания которых старше чем 6 дней от текущей даты. »

OSArev
14-02-2011, 15:46
А что не так?
вот же ваше условие: »
У меня тоже всё работает.

XXXp
14-02-2011, 16:24
Странно, у меня почему-то не удаляет старше 6-ти дней, только меньше 9кб, сегодня ещё раз попробую вечером, спасибо

Ivan Bardeen
14-02-2011, 16:50
XXXp,
покажите вывод скрипта, указав путь к файлу, который старше 6 дней и не удаляется

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("путь_к_файлу")
Wscript.Echo "Date created: " & objFile.DateCreated & Vbcrlf & "Date last accessed: " & objFile.DateLastAccessed & vbcrlf & "Date last modified: " & objFile.DateLastModified

SendMessage
14-02-2011, 19:42
XXXp, может Вы для проверки скопировали куда-нибудь свою "c:\papka" и там пытаетесь скриптом работать?
При этом действии у всех файлов дата создания изменится на нынешнюю (а дата модификации остается неизменной). И, естественно, скрипту нечего удалять по условию 6 дней.

Ivan Bardeen
14-02-2011, 20:48
SendMessage,
Та же мысль возникла : )
Посему и попросил автора показать вывод скрипта

XXXp
14-02-2011, 22:57
Да да, все верно, я перед проверкой копирую файлы в c:\papka и у каждого файла соотв. два параметра: первый "дата создания", второй "дата изменения". Соответственно первый остается неизменным, можно ли именно его брать за основу, т.е. если дата создания файла более 6 дней от текущей - файл удалять..

Ivan Bardeen
14-02-2011, 23:51
XXXp,
Вывод скрипта покажете?
PS: Мой скрипт работает, можете его применять в "продуктиве"

SendMessage
15-02-2011, 04:06
Неизменной остается при копировании дата модификации.
Если это то, что Вам нужно, замените в скрипте строку Datefile = objfile.DateCreated на Datefile = objfile.DateLastModified

XXXp
16-02-2011, 12:29
Вот! Теперь все работает для моего случая, видимо я просто неправильно выразился! Спасибо большое всем Вам за помощь!

Leem111
16-12-2011, 09:14
А как сделать, чтобы этот скрипт удалял файлы и в подпапках?

Leem111
03-05-2012, 11:04
Здравствуйте, уважаемые форумчане.
Хотел с помощью данного скрипта, сделать, чтобы удалялись файлы размером более 500 метров.
И чтобы файлы также искались и в под-папках. Помогите. Я в этом не особо шарю сильно не пинайте..
Вот что я наковырял:

Folder = "c:\1\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Folder)

If objfile.Size > 512000 Then
objfile.Delete(TRUE)
End If
End If
Next

DmitriiV
03-05-2012, 12:36
Leem111, используйте функцию, вызываемую рекурсивно. Пример:

Public objFSO
Folder = "c:\1\"
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
If objFile.Size > 512000 Then objFile.Delete TRUE
Next
For Each objSubFolder In objFolder.SubFolders
Call ClrFolder(objSubFolder.Path)
Next
End Function

El Sanchez
03-05-2012, 13:08
более 500 метров »
objFile.Size > 512000 »
DmitriiV, нужно 524288000

DmitriiV
03-05-2012, 15:12
нужно 524288000 »Для сути решения это совершенно неважно. Поэтому было оставлено значение, использованное в заготовке автора темы.




© OSzone.net 2001-2012