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