Для файлов 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-файлы, которые можно быстро открывать из проводника.