ABC71 - A essência dos seus negócios

Al. Santos, 1.000 - 1º Andar
CEP: 01.418-902 - São Paulo - SP

Telefone: (11) 2179-3132
www.abc71.com.br

Notícias

Notícias

Balaio Tecnológico: Automatizando tarefas que envolvem arquivos através de scripts

O tempo passa, as tecnologias evoluem, novos paradigmas são introduzidos e passam a ser dominantes. Mas ainda não inventaram nada que seja tão efetivo e rápido para integrar sistemas do que a boa e velha troca de arquivos.


Mesmo com a popularização dos Web Services e outros mecanismos, a troca de informações entre sistemas de fabricantes diferentes ou que exijam acesso a um sistema legado ainda têm no uso de arquivos texto uma solução prática.

 

Embora obviamente não se restrinjam ao cenário descrito acima, a Microsoft disponibiliza em seus sistemas operacionais ferramentas que permitem aos desenvolvedores ter acesso a toda a estrutura de pastas e arquivos e realizar operações básicas nessa estrutura.

 

O ponto de entrada para ter acesso a esta estrutura é o objeto FileSystemObject, disponível como uma interface COM. Com uma instância desse objeto você pode listar as subpastas e arquivos existentes numa pasta específica. Pode também copiar, mover e criar tanto pastas quanto arquivos, além de listar os drives conectados no computador e obter informações a respeito deles - como o espaço livre remanescente.

 

O código VBScript abaixo pesquisa os arquivos e subpastas contidos na pasta Processo, detecta os que são arquivos compactados (ZIP) e os move para a pasta Historico. Usei o VBScript porque ele pode ser agendado como se fosse um executável, completando a automatização das tarefas.


Dim fso
Dim gArqLog, caminho
Dim gPasta, gArqs, arquivo

Set fso = CreateObject("Scripting.FileSystemObject")
Set gArqLog = fso.CreateTextFile ("carga.log")

' Lê o conteúdo da pasta Processo
caminho = "c:\Processo\"
Set gPasta = fso.GetFolder (caminho)
Set gArqs = gPasta.Files

' Processa os arquivos que são do tipo ZIP
for each arquivo in gArqs
if fso.GetExtensionName (arquivo) = "zip" then
' Armazena no log o nome do arquivo processado
gArqLog.WriteLine (arquivo.Name)

' incluir aqui algum processamento com o arquivo
fso.MoveFile caminho + arquivo.Name, "c:\Historico\" + arquivo.Name
end if
Next

gArqLog.Close ()
Set fso = Nothing


O exemplo apenas ilustra como funciona uma pesquisa básica numa pasta - para a tarefa proposta, poderíamos simplesmente usar o MoveFile com uma máscara *.zip de uma pasta para a outra.

 

Algumas observações sobre o que acontece no código acima. Para começar, a função CreateObject cria o objeto principal - uma instância do Scripting.FileSystemObject. A princípio, uso esse objeto para criar um arquivo texto onde são gravados os nomes dos arquivos que forem processados - uma espécie de log.

 

Em seguida, a função GetFolder recupera um objeto que representa a pasta com a qual queremos trabalhar; dessa pasta, obtemos uma "coleção" com os arquivos contidos nela, coleção esta representada pela proprieda Files. Tal coleção implementa a interface IEnumerator, o que nos permite navegar pela lista usando o laço For Each, mais direto que o For convencional nesses casos.

 

Para terminar, o comando MoveFile move o arquivo processado da pasta original para outro local, de modo que se, o script for executado de novo, serão processados somente arquivos novos colocados na pasta de origem.

 

Note que eu a função GetExtensionName para determinar se o arquivo deve ou não ser considerado. Poderia ter usado a propriedade Type do arquivo. No entanto, o valor retornado por Type é afetado pela língua do sistema operacional (português, inglês, etc.), sendo um problema quando se precisa ter tal script em outras máquinas.

 

O script poderia ainda incluir outras tarefas com o ZIP, incluindo a chamada de rotinas para descompactá-lo e processar o conteúdo. Neste caso, um outro objeto seria necessário para executar um programa externo (como o unzip): o WshShellObject.

 

Luís Gustavo Fabbro é Bacharel em Ciências da Computação, formado pela Unesp Bauru. Foi responsável pelos módulos da área industrial do ERP da ABC71 Soluções em Informática entre 1993 e 1998. Em 2002, passou a ser responsável pela nascente área de Pesquisa & Desenvolvimento da empresa. É profissional certificado pela Microsoft, com especialização em arquitetura do Sistema Operacional Windows.