АдмініструванняПрограмування

Спільна папка для обміну документами в офісі (автоматизація очищення)

Майже завжди, коли кілька комп’ютерів об’єднують у мережу, на одному чи кількох із них з’являється папка з доступом на запис, щоб було зручно обмінюватися документами. Спочатку зазвичай проблем немає. Але якщо така папка розташована на сервері, до якого мають доступ багато працівників, рано чи пізно вона перетворюється на звалище файлів: ніхто не поспішає видаляти залишені там файли. Іноді цим займається системний адміністратор. Згодом у нього виникає бажання пояснити всім працівникам, що ця папка призначена лише для обміну й у ній не слід нічого зберігати. Та набагато простіше, красивіше й ефективніше створити скрипт, який не дозволить цьому звалищу розростатися.

Що робить скрипт:

  • Видаляє всі файли з папки, крім зазначених винятків.
  • Переміщує все видалене до окремої папки (назвемо її «архів»), названої датою видалення. Так згодом можна зрозуміти, що саме було видалено цього дня.
  • Очищає архів, залишаючи в ньому вказану кількість папок.

Звісно, цей скрипт потрібно запускати щодня; для цього можна використати стандартний планувальник завдань.

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

Обговорення 1

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

Залишити коментар

Вашу електронну адресу не буде оприлюднено. Обов’язкові поля позначено *