Практически всегда, когда несколько компьютеров соединяют в сеть, на одном или нескольких из них появляется папка открытая на запись, для удобства обмена документами между собой. На этом этапе проблем обычно не возникает. Но если такая папка появляется на сервере, куда имеют доступ много сотрудников, то рано или поздно появляется проблема файлопомойки, когда сотрудники не утруждают себя чисткой оставленных там файлов. В этом случае иногда этим занимается системный администратор. Рано или поздно у него возникает желание вбить в голову всех сотрудников, что это папка только для обмена что не стоит там ничего сохранять, но гораздо проще, красивей и эффективней сделать скрипт, который будет предотвращать разрастание файлопомойки.
Что делает скрипт:
- Удаляет все файлы в папке, кроме заданных исключений.
- Складывает все удаленное в отдельную папку (назовем ее «архив»), озаглавленную датой, когда произведено удаление. Так чтоб потом можно было понять что там было удалено в этот день.
- Чистит архив, оставляя там заданное количество папок.
Конечно этот скрипт нужно еще и ежедневно запускать, но тут применяем хотя бы стандартный планировщик задач.
2025.11.18 P.S. Сам скрипт оказался хорош и востребован и проработал 15 лет и работает по сей день, но у меня дошли руки его немного причесать и улучшить, так что далее новая версия этого скрипта.
Сам скрипт на VB (сохраняем его например в файл «obmen.vbs»):
'====================== НАСТРОЙКИ ======================
pMusornik = "M:\MUSORNIK" 'папка мусорника
pBackupRoot = "M:\BACKUP\deleted\" 'корень папки deleted
minAgeDays = 7 'минимальный возраст для переноса
keepDays = 30 'сколько дней хранить бэкапы
skipFolders = Array( _
"Бухгалтерия", _
"Информация", _
"Персональные папки" _
)
skipFiles = Array( _
"desktop.ini" _
)
'====================== ПОДГОТОВКА ======================
Set fso = CreateObject("Scripting.FileSystemObject")
Set oMusornik = fso.GetFolder(pMusornik)
pBackup = pBackupRoot & fixDate(Date)
If Not fso.FolderExists(pBackup) Then
Set oBackup = fso.CreateFolder(pBackup)
Else
Set oBackup = fso.GetFolder(pBackup)
End If
'====================== ПЕРЕНОС ПАПОК ======================
For Each oFolder In oMusornik.Subfolders
If Not InArray(oFolder.Name, skipFolders) Then
If IsOld(oFolder, minAgeDays) Then
oFolder.Move oBackup.Path & "\"
End If
End If
Next
'====================== ПЕРЕНОС ФАЙЛОВ ======================
For Each oFile In oMusornik.Files
If Not InArray(oFile.Name, skipFiles) Then
If IsOld(oFile, minAgeDays) Then
oFile.Move oBackup.Path & "\"
End If
End If
Next
'====================== ОЧИСТКА СТАРЫХ ПАПОК DELETED ======================
For i = keepDays To 100
oldFolder = pMusornik & "\deleted\" & fixDate(Date - i)
If fso.FolderExists(oldFolder) Then
fso.DeleteFolder oldFolder, True
End If
Next
'====================== ФУНКЦИИ ======================
Function InArray(value, arr)
For Each v In arr
If LCase(v) = LCase(value) Then
InArray = True
Exit Function
End If
Next
InArray = False
End Function
Function IsOld(obj, days)
IsOld = (Now - obj.DateLastModified) >= days
End Function
Function fixDate(dt)
fixDate = Year(dt) & "-" & Right("0" & Month(dt), 2) & "-" & Right("0" & Day(dt), 2)
End Function

Действительно очень удобный скрипт, который позволяет сэкономить кучу времени, для очистки компьютера. На своём опыте знаю, что обычно на подобных файлопомойках накапливается огромное количество ненужной информации, которую рано или поздно приходиться чистить системному администратору. Возникает закономерный вопрос — зачем тратить на этот процесс уйму времени, если его можно автоматизировать с помощью данного скрипта. Имел подобную проблему, тогда у нас при обмене документами, на подобных папках, также скапливалось много ненужной информации, которую приходилось время от времени чистить.