Назад | Перейти на главную страницу

Сжимайте файлы в ежедневные / еженедельные / ежемесячные архивы с помощью запланированных задач Windows

Для файлов EDI, которые необходимо заархивировать, я хотел бы использовать утилиту сжатия (например, 7Zip), которая собирает и сжимает файлы на основе их дата файла. Например, еженедельный архив (incoming-2009-01.7z для недели 1) необходимо обновлять всеми входящими файлами, дата файла которых находится на этой неделе.

Есть ли утилита командной строки, которую можно использовать для вызова инструмента сжатия с необходимыми аргументами, или другой простой способ реализовать такую ​​стратегию архивирования?

Я не знаю утилиты, которая предоставляет это напрямую, но довольно просто создать сценарий (с использованием powershell, perl, python ..) для определения файлов, соответствующих вашим критериям, отбросив полностью определенные имена (например, d: \ incoming \ something \ filename.ext) в простой текстовый файл, одно имя файла в строке, а затем ваша утилита сжатия создаст архив из этого файла списка, например

7z -a output.zip @filelist.txt

Если вы оберните все это внутри сценария, тогда будет тривиально легко назначить тип имен архивов, которые вы указали.

Добавлен пример Powershell.

$archiveroot="c:\temp"
$oldest = (get-date) - (new-timespan -day 31)
$archivename="Incoming-" + $oldest.year + "-" +$oldest.month+".7z"
$filelist= get-childitem $archiveroot -recurse | where-object {$_.lastwritetime -gt $oldest}
$filelist | format-table -hideTableHeaders FullName | out-file -encoding utf8 -filepath lastmonthsfiles.txt
& .\7z.exe a $archivename `@lastmonthsfiles.txt

Это не совсем один лайнер, вам нужно будет правильно указать его на 7-Zip exe, добавить некоторую обработку параметров, некоторое ведение журнала \ обработку ошибок, и он должен очистить рабочие файлы, но это указатель в правильном направлении.

Я использую сценарий, составленный из разных источников ..

rd /s /q f:\todays

rem This makes a backup of the previous days data, 

    robocopy u:\  F:\todays\u-Drive /mir /w:0 /r:0 /e /s /np /fft /maxage:1 /maxlad:1 /xf *.pst

rem zips up the backup folder

    7z a -tzip todays "todays\*" -r


rem renames the zip file to a date stamp

    Set CURRDATE=%TEMP%\CURRDATE.TMP
    Set CURRTIME=%TEMP%\CURRTIME.TMP
    DATE /T > %CURRDATE%
    TIME /T > %CURRTIME%
    Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
    For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j
    Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
    For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMM=%%i%%j%%k


    RENAME todays.zip backup_%YYYYMMDD%%HHMM%.zip


    move /y F:\*.zip F:\backup\Zips

Я использую 7zip и robocopy. Поместите оба exe-файла в тот же каталог, что и сценарий.

Как это устроено:

Он удаляет папку «сегодняшние» предыдущих дней, так как нам нужен чистый лист, затем robocopy сканирует папку данных (U :) и ее набор для копирования только тех файлов, которые были созданы или изменены за последние 24 часа. Он копирует его на другой диск / в папку (F: \ todays). Это даст вам дополнительные файлы.

7zip затем сжимает эту папку

следующий скрипт вычисляет год, месяц, день, часы, минуты, секунды, а затем переименовывает zip-файл, созданный с помощью 7zip.

Наконец, скрипт перемещает переименованный zip в другую папку под названием zips.

Я использую эту форму сценария много лет, чтобы ежедневно получать zip-файлы, которые можно быстро открывать из проводника.