terça-feira, 24 de fevereiro de 2009

Laço FOR em Backup no MS-DOS



Após um bom tempo acostumado com Shell Script, ter que automatizar processos no Windows (inevitavelmente fazendo uso do MS-DOS...) parece um tanto traumatizante.

Felizmente esse tão esquecido prompt de comando tem sua pseudo linguagem de controle!

Fiz um script de lote, backup-workspace.bat, para realizar o backup de determinados diretórios de trabalho do Eclipse:

@echo off
set ZIP=C:\Arquiv~1\7-Zip\7z.exe
set WKS=%1
echo Backing up workspace %WKS%...
%ZIP% a -r -x@backup-ignore-list.txt -mx=9 %WKS%.zip %WKS%

A tarefa dele é através do 7-ZIP [1] fazer o backup dos arquivos contidos no diretório especificado como argumento no script. Um arquivo com a extensão ZIP e mesmo nome do diretório será criado.

Os padrões especificados neste arquivo de texto, backup-ignore-list.txt, farão com que determinados arquivos e diretórios sejam ignorados:

bin
Thumbs.db
*.log
*.class
org.eclipse.core.resources\.history
org.eclipse.jdt.core
org.eclipse.epp.usagedata.recording
org.eclipse.wst.server.core\tmp0

A última etapa, a criação de um único script para executar os diversos diretórios desejados, precisava ser feita. O novo script, backup-all.bat, poderia ter o seguinte conteúdo:

@echo off
backup-workspace ApressEJB3
backup-workspace Concorde
backup-workspace HiberStruts
backup-workspace PacktEJB3

Achei esse código meio feio, então resolvi dar uma investigada em como deixá-lo menos lusitano...

E eis que encontro o famigerado laço FOR no MS-DOS [2]...!



Agora sim, com umas leves modificações o script ficou assim:

@echo off
set WKS=ApressEJB3, Concorde, HiberStruts, PacktEJB3
for %%w in (%WKS%) do backup-workspace %%w

É, aparentemente ele fez tudo certinho após a execução..!



Referências: