Q1: Posso automatizar isso em, por exemplo, Mês ou mesmo ano nível
preserving the HOURLY zipping, as that is the whole point...?
A maneira de automatizar isso é usar os loops for
aninhados.
A solução abaixo é para o nível do mês. Use a mesma abordagem com outro nível de aninhamento para uma solução no nível do ano.
Execute o seguinte arquivo de lote (RecurseDays.cmd) na pasta Month de sua escolha:
@echo off
rem start in a month folder and loop through the days
for /d /r %%d in (*) do (
rem for each day, change directory to the day
pushd %%d
rem loop through the hours
for /d %%h in (*) do (
rem zip the hour
echo "c:\Program Files (x86)-Zipz.exe" a -tzip "%%h.zip" ".\%%h\*"
)
rem done with the day, change directory back to the month
popd
)
Notas:
- Remova o
echo
do comando7z
quando estiver satisfeito com os arquivos em lote conforme o esperado.
Q2: atualmente migro os arquivos por hora compactados para o armazenamento a frio manualmente
the directory structure at the destination is slightly different to that at the source. Is there any scope to automate that as well?
Você pode usar robocopy
. O lugar certo seria logo depois:
rem done with the day, change directory back to the month
Aqui você pode migrar todos os arquivos de hora de todos os dias do mês em que você está. robocopy
preservará a estrutura de diretórios e também tem a opção de mover os arquivos zip se isso for desejado (em vez de copiando-os).
Veja o link abaixo para mais informações.
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- para / d - Realize condicionalmente um comando em vários diretórios / pastas.
- pushd - Altere o diretório / pasta atual e armazene a pasta / caminho anterior para uso pelo comando POPD.
- popd - Altere o diretório de volta para o caminho / pasta armazenado mais recentemente pelo comando PUSHD.
- robocopy - Cópia robusta de arquivos e pastas.