Compacta arquivos para arquivos diários / semanais / mensais com tarefas agendadas do Windows

2

Para arquivos EDI que precisam ser arquivados, eu gostaria de usar um utilitário de compactação (como o 7Zip) que coleta e compacta arquivos com base na data do arquivo . Por exemplo, um arquivo semanal (incoming-2009-01.7z para a semana 1) precisa ser atualizado com todos os arquivos recebidos cuja data do arquivo é esta semana.

Existe um utilitário de linha de comando que pode ser usado para invocar uma ferramenta de compactação com os argumentos necessários ou uma outra maneira fácil de implementar essa estratégia de arquivamento?

    
por mjn 23.08.2009 / 12:33

2 respostas

4

Eu não sei de um utilitário que fornece isso diretamente, mas é bastante simples construir um script (usando powershell, perl, python ..) para identificar os arquivos que atendem aos seus critérios, descartar os nomes completos (por exemplo, d : \ incoming \ something \ filename.ext) em um arquivo de texto plano, um nome de arquivo por linha e, em seguida, seu utilitário de compactação criar um arquivo a partir desse arquivo de lista, por exemplo

7z -a output.zip @filelist.txt

Se você colocar a coisa toda dentro do script, será muito fácil atribuir o tipo de nome de arquivo que você especificou.

Adicionado um exemplo do 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
& .z.exe a $archivename '@lastmonthsfiles.txt

Não é bem um liner, você precisará apontá-lo corretamente no exe 7-Zip, adicionar alguns parâmetros de manuseio, alguns logs \ error e ele deve limpar os arquivos de trabalho, mas é um ponteiro na direção certa .

    
por 23.08.2009 / 15:22
1

Eu uso um script feito de diferentes fontes.

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

Eu uso 7zip e robocopy. Coloque ambos os arquivos exe no mesmo diretório do script.

Como funciona:

Ele exclui a pasta dos dias anteriores como queremos um slate limpo, em seguida, o robocopy varre a pasta de dados (U :) e seu conjunto para copiar somente os arquivos criados ou modificados nas últimas 24 horas. Ele copia para outra unidade / pasta (F: \ hoje). Isso fornece os arquivos incrementais.

7zip então comprime a pasta

o próximo script calcula o ano, mês, dia, horas, minutos, segundos e renomeia o arquivo zip feito em 7zip.

Finalmente, o script move o zip renomeado para outra pasta chamada 'zips'.

Eu tenho usado esse script há muitos anos para me dar arquivos zip diários que podem ser abertos rapidamente a partir do explorador.

    
por 05.11.2009 / 17:33