Eu tenho um script em lote que faz algo semelhante para empacotar versões do jogo em que estou trabalhando. Eu o adaptei e você provavelmente pode usar algo semelhante ao seguinte:
@echo off
cd folder
zip -9 -r Filename.zip *
echo Done.
Os zip switches:
-
-9
tenta a melhor compactação -
-r
causa recursão de diretório
Se você precisar copiar recursos, ou uma árvore de pastas, por exemplo (como eu precisei fazer), você pode usar o xcopy para efetuar isso.
echo Copying resources to Release dir...
xcopy resources bin\Release\Resources /Y /E /I
As várias linhas de comando são alteradas aqui:
- causa sobrescrita automática de arquivos existentes (
/Y
) - copie todas as pastas, incluindo as vazias (
/E
) - basicamente permite copiar árvores de diretórios (
/I
)
Espero que isso forneça informações suficientes para que você possa configurar o script em lote. Então, como os outros disseram, você pode usar tarefas agendadas para fazer com que o script seja executado de hora em hora. Se você não tem a linha de comando zip, eu uso este . Copie-o para C:\Windows\System32
e ele deverá estar acessível em todos os scripts em lote.
Atualizar
Para adequar seu comentário adicional sobre como nomear o zip com o timestamp atual, proponho a seguinte solução: Adicione as seguintes linhas ao final do script em lote que você definiu para ser executado por hora.
set timestamp=%date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2%%time:~6,2%
ren OldZipFileName.zip %timestamp%.zip
Isso renomeará o arquivo zip antigo para o novo, com o formato YYYYMMDDHHmmSS; isto é, ano-mês-dia-hora-minuto-segundo. Se você deseja adicionar um prefixo ou sufixo ao nome do arquivo, faça isso antes ou depois da seção %timestamp%
, por exemplo:
ren OldZipFileName.zip build_%timestamp%_debug.zip
Atualizar novamente
O motivo da grande e difícil linha set timestamp=...
é que os formatos padrão de %date%
e %time%
não são os melhores para o que queremos fazer. Se nós os fizermos eco ao console para ver como eles são normalmente, teremos algo parecido com isso:
> echo %date%
Sun 13/12/2009
> echo %time%
2:53:31.60
Então, usamos a função de substring de fantasia de variáveis em lote, assim: %variablename:~startindex,length%
. Como você pode ver acima, você precisará repeti-lo uma vez para cada segmento que deseja copiar. Então, no meu caso, para obter o nome do arquivo de saída no formato AAAAMMDDHHMMSS, eu precisava copiar três partes de cada uma das variáveis %date%
e %time%
, usando a substring. Junte todas essas partes e você terá a longa lista que escrevi lá antes. Para dar um exemplo dessas partes individualmente:
> echo %date%
Sun 13/12/2009
> echo %date:~10,4%
2009
> echo %date:~7,2%
12
Espero que isso ajude a esclarecer as coisas para você!