7zip - Use o Agendador de Tarefas do Windows para compactar um arquivo que tenha data e hora do dia anterior

3

Eu tenho um servidor web que gera arquivos de log todos os dias, o log do dia será salvo automaticamente como Log.YYYY-MM-DD.txt (ou seja, Log.2016-07-20.txt ).

Agora preciso usar o Agendador de Tarefas do Windows para compactar o arquivo de log do dia anterior. Existe uma opção disponível no 7zip cmd que identificaria automaticamente o nome do arquivo com base na data atual? / p>     

por Joel Min 21.07.2016 / 10:32

2 respostas

3

Script em lote - Subtraindo (ou adicionando) dias do dia atual simplificado

Você pode fazer isso usando um script em lote que define a variável date e subtrai 1 dia (ou qualquer número de dias para esse assunto) da data atual em que o script em lote é executado. Portanto, você precisa garantir que o dia em que agendar o script seja executado, que esse dia é o que você espera que o cálculo ocorra para determinar os valores de data no nome do arquivo de log do dia anterior.

Eu coloco mais comentários no script para explicar o que cada variável faz e assim por diante, mas basicamente você define as variáveis no script em lote como de costume, e as usa para construir três Scripts VB dinâmicos para fazer a data cálculo de subtração, adicionar zeros à esquerda quando necessário e assim por diante para as variáveis YYYY, MM e DD.

Para adicionar: Você também pode usar esse script para adicionar um número de dias à data atual, excluindo o menos ( - )  símbolo do script em lote abaixo na rotina :DynamicVBSScriptBuild , onde você vê esse ,-%MinusDay%, simples, remova o símbolo menos para obter ,%MinusDay%, em cada uma dessas linhas e agora o MinusDay= O valor da variável será igual ao número de dias que você deseja adicionar.

Nota importante: parece que cinco 9s ( 99999 ) é o limite do script em lote ao subtrair o valor MinusDays= . Também parece que seis 9's ( 999999 ) é o limite no script em lote ao adicionar com o valor MinusDays= .

Script em lote

@ECHO ON

::// Minus days is the number of days to subtract from the CURRENT DAY i.e. 2 for minus 2 days or 99999 for minus 99999 days from when it's run
SET MinusDay=2

::// Set the archive file full path and file name
SET ArchiveFile=C:\ArchivePath\Archive.zip

:: This calls the temp vbs script routine that will be used to set YYYY-MM-DD values for the subtracted days date you specify
CALL :DynamicVBSScriptBuild

FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%YYYYTmpVBS%"') DO SET YYYY=%%A
FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%MMTmpVBS%"') DO SET MM=%%A
FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%DDTmpVBS%"') DO SET DD=%%A

::// Set your web server log file path in the below variable
SET WebServerLogPath=C:\WebServer\Logs

::// Set web server log file name where YYYY MM DD variables are set to the values after the day numbers setup above are subtracted
SET WebServerLogFile=Log.%YYYY%-%MM%-%DD%.txt

::CD /D "C:\Program Files-Zip"
7z a "%ArchiveFile%" "%WebServerLogPath%\%WebServerLogFile%"

::GOTO EOF
EXIT /B

:DynamicVBSScriptBuild
SET YYYYTmpVBS=%temp%\~tmp_yyyy.vbs
SET MMTmpVBS=%temp%\~tmp_mm.vbs
SET DDTmpVBS=%temp%\~tmp_dd.vbs
IF EXIST "%YYYYTmpVBS%" DEL /Q /F "%YYYYTmpVBS%"
IF EXIST "%MMTmpVBS%" DEL /Q /F "%MMTmpVBS%"
IF EXIST "%DDTmpVBS%" DEL /Q /F "%DDTmpVBS%"
ECHO dt = DateAdd("d",-%MinusDay%,date) >> "%YYYYTmpVBS%"
ECHO yyyy = Year(dt)                    >> "%YYYYTmpVBS%"
ECHO WScript.Echo yyyy                  >> "%YYYYTmpVBS%"
ECHO dt = DateAdd("d",-%MinusDay%,date) >> "%MMTmpVBS%"
ECHO mm = Right("0" ^& Month(dt),2)     >> "%MMTmpVBS%"
ECHO WScript.Echo mm                    >> "%MMTmpVBS%"
ECHO dt = DateAdd("d",-%MinusDay%,date) >> "%DDTmpVBS%"
ECHO dd = Right("0" ^& Day(dt),2)       >> "%DDTmpVBS%"
ECHO WScript.Echo dd                    >> "%DDTmpVBS%"
GOTO EOF

Mais recursos

por 22.07.2016 / 07:48
1

Eu acho que é sempre muito complicado calcular datas. Portanto, gostaria de propor uma solução alternativa para alcançar o que você precisa.

Eu usaria outra tarefa agendada para exibir a data atual com o formato AAAA-MM-DD em um arquivo. Você pode encontrar informações sobre como fazer isso aqui .

Em seguida, no seu trabalho agendado que é responsável pela compactação, basta ler o arquivo e compactar todos os arquivos correspondentes à data. O único problema é que você precisaria executar a primeira tarefa um dia antes. Como:

Execute a tarefa 1 às 23:55

Execute a tarefa 2 às 00:05

Parece muito "pouco inteligente", mas faz o trabalho.

    
por 21.07.2016 / 11:11