Nesta semana, precisei reescrever uma batch utilizada pelo sistema da empresa que está em Clipper. Ela era uma linguiça gigante cheia de goto, enfim, uma verdadeira bagunça. Para melhorar, separei tudo em funções e vou mostrar aqui como fazer isso.

Caso encontre dificuldade para visualizar os exemplos abaixo, faça o download deles clicando aqui.

Goto

Procurando na internet, encontramos muitos exemplos de utilização deste método. Basicamente, definimos pontos no código e fazemos o ponteiro da aplicação avançar e retornar para qualquer um e em qualquer tempo. Vamos a um exemplo:

O funcionamento aqui é muito simples: Inicia o arquivo, vai para o ponto INICIO, ele mostra a mensagem e vai para o ponto FIM, que também exibe uma mensagem e sai do arquivo.

Como pode perceber, esta estrutura é confusa e nada prática. Aplicações construídas neste molde, tornam-se monstros com vida própria e funcionamento autonômo – sim, com vida própria xD

Call

Vamos incrementar o exemplo acima e faze-lo utilizando funções.

Perceba que todas as funções ficaram no final do arquivo, após a tag goto:eof. Atente também que uma função inicia na definição do seu nome e vai até tag exit /b 0.

ERRORLEVEL

A função tem funcionamento semelhante ao goto diferenciando somente pela possíbilidade do ponteiro retornar para a próxima linha de comando, e ainda retornar um código ERRORLEVEL para validação.

Por definição – minha ^^’ – as funções retornam 0 para sucesso e 1 para falha. Isto é possível devida a tag exit /b que encerra o bloco da função e retorna o número informado para a variável ERRORLEVEL.

Parâmetros

Também é possível passar parametros para as funções. Eles devem ser informados logo após o nome da função na tag call e utilizandos na funções através da tag %~1, %~2, %~3 e assim por diante.

No exemplo abaixo, adicionei a função parametros que recebe parametros e retornar 1. Desta forma, vamos validar o valor do retorno e sair do arquivo sem chamar a função processamento.

Variáveis locais

Como você deve saber, definimos as variáveis na batch pela tag set.

Algumas situações, haverá a necessidade de uma variável local em sua função. Para isso, basta declarar e utilizar suas variáveis dentro das tags setlocal e endlocal.

Para exemplificar, modifiquei a função parametros para que ela some os dois primeiros parametros em uma variavel local e exiba o resultado.

Retorno de parâmetros

No exemplo anterior, a soma foi realizada em uma variavel local e depois mostrada na tela. Mas podemos querer utilizar este valor em algum lugar da nossa aplicação. Desta forma, podemos mandar um quarto parametro com o nome da variável para armazenar o resultado.

Modifiquei nossa bath informando mais um parâmetro para a função parametro, retornando o valor da soma nele e mostrando seu valor fora da função.

Conclusão

Pesquisando um pouco na internet, verifiquei que muitas pessoas estão migrando para o VBScript por não saberem criar corretamente uma boa e velha batch. ^^

Obviamente, as vezes ha realmente a necessidade do VBScript, mas isso são raras excessões que eu gosto de evitar ao máximo. Rotinas em vbscript são mais complexas o que prejudica um pouco da manutenção.

Se posso usar uma batch simples e rapida, pra que complicar? =)

Aproveite e veja Utilizando “include” em arquivos DOS Batch onde ensino a como simular “includes” usando o conceito de função.

Termos de busca


Tags: bat, batch, dos, how to, windows

Quer copiar esse post no seu site? Você pode!

Segundo a licença da Creative Commons 3.0 (CC BY SA 3.0) você pode copiar e distribuir esse conteúdo desde que faça menção ao autor original, para isso é só copiar esse código no final do artigo quando for publicá-lo em seu site:

<p>Artigo originalmente publicado em <em>2 de novembro de 2011</em> por <strong><a href="http://pedroelsner.com/" title="Pedro Elsner, Profissional de TI - São Paulo">Pedro Elsner</a></strong>: <a href="http://pedroelsner.com/2011/11/gptp-vs-call-utilizando-funcoes-em-arquivos-dos-batch/" title="Goto vs Call – Utilizando funções em arquivos DOS Batch">Goto vs Call – Utilizando funções em arquivos DOS Batch</a></p>
A não menção ao autor original da obra implicará em cópia e/ou distribuição ilegal de propriedade intelectual, o que é crime segundo a Lei n.º 9.610.