Programando scripts em BAT
Vejo constantemente que há muitas pessoas que se perguntam sobre este tema, então decidi abordar um texto bem completo que explique como funciona e o que se pode fazer.
Espero que seja de utilidade a alguém, como um dia já foi para mim.
Introdução
O que se pode fazer com eles?
Podemos fazer de forma automatizada tudo aquilo que se pode fazer no prompt do ms-dos.
Como faço um arquivo bat?
Coloque em texto usando o bloco de notas ou algum editor ascii.
Ao salvá-los devem ter formato de nomes próprio do ms-dos. Este nome com no máximo 8 letras (espaço e \ não são permitidos) seguido de um ponto e a extensão que neste caso é obrigatoriamente bat.
Como posso selecionar vários arquivos (caracteres curinga);
Levando-se em conta os nomes dos arquivos (8 letras sem espaço seguidos de um ponto e três letras como máximo da extensão). Pode-se utilizar os comandos;
? -> Equivale a apenas um caracter.
Exemplos:
comando *.doc -> selecionar todos os arquivos que tenham a extensão doc.
comando a*.doc -> selecionar todos os arquivos que comecem com a letra “a” e tenha a extensão doc.
comando a*b.doc -> selecionar todos os arquivos que comecem por “a”, acabem por “b” e tenham a extensão doc.
comando *mao*.doc -> selecionar todos os arquivos que contenham a string ‘mao’ e tenham a extensão doc.
comando c?mao.doc -> selecionar todos os arquivos que contenham “c”, seguido de um carater qualquer e depois ‘mao’. Deve ter também a extensão doc.
comando c?b*.* -> selecionar todos os arquivos que comecem por “c”, tenham um caracterr qualquer, seguide de um b e qualquer extensão.
comando *.b?t -> selecionar todos os arquivos que tenham a extensão que comece por b, seguido de um caracter qualquer e depois um t.
Quem são os patchs;
O patch é o nome completo de um arquivo e indica a localização exata de um arquivo e seu nome.
Se digo que o arquivo se chama arquivo.txt indico seu nome, mas nada mais. Se supõe que se encontra no diretório atual.
Se digo c:\arquivo.txt indico que o arquivo que me interesse se chama arquivo.txt e se encontra no diretório ráiz de C.
Dado que no ms-dos não se admite nomes grandes ( mais de 8 letras ) nem espaço, quando quero utilizar o nome do windows em ms-dos devo saber que este será reconvertido em seu nome curto. Este se obtem os seis primeiros carácteres válidos do nome, logo o sinal ~ (alt 126) e logo um número.
Que comandos podemos utilizar;
Comandos;
Aqui estão alguns comandos utilizados em batch.
ECHO [mensagem ou variável]
Escreve na tela
ECHO OFF
Desativa as informações exibidas feitas pelo sistema.
ECHO ON
Ativa as informações do sistema.
ECHO.
Pula uma linha
SET variavel=valor
Cria ou modifica uma variável (espaço reservado temporariamente na memória RAM para guardar algumas informações númericas, de caractéres, positivo/negativo entre outros. Não podem ter acento e devem começar com letra). Para chamar a variável posteriormente basta coloca-la entre “%”.
Por exemplo:
SET nome=Storm
ECHO O nome dele é %nome%
:nomedolink
Nomeia um ponto do arquivo de lote permitindo avançar ou voltar a execução apartir daquele ponto.
CLS
Esse comando limpa toda a tela. CLear Screen.
@[Comando]
Desativa as informações e confirmações feitas pelo sistema apenas para esta linha.
IF [condição] (
[ação]
) ELSE (
[ação2]
)
Por exemplo:
@ECHO OFF
SET nome=Storm
IF “%nome%”==”Storm” (
ECHO Ola Storm!
) ELSE (
ECHO Ola %nome%!)GOTO [ponto]
Avança ou volta a execução para um ponto do arquivo de lote.
FOR /L %%variavel IN (inicio,incremento,fim) DO comando [parâmetro]
Repete um comando varias vezes fazendo incrementações até o fim ser atingido.
/L ->, é uma opção do comando FOR que faz as incrementações.
%% ->variavel, é o nome da variável que vai ser incrementada.
inicio -> é o valor de inicio da variável que será incrementada.
incremento -> número que será somado a cada incrementação.
fim -> a repetição irá acabar quando o valor da variável atingir este valor.
comando -> um comando que será repetido.
[parâmetro] -> o parâmetro do comando que será repetido.
Por exemplo:
FOR /L %%a IN (1,1,5) DO ECHO O valor de A é %%a
PAUSE
Faz uma pausa e só volta quando o usuário apertar alguma tecla do teclado.
REM [comentário]
Este comando não faz absolutamente nada. Ele é utilizado para inserir comentários nos arquivos.
$p = mostrar trajeto atual
$g = mostrar o separador >
$l = mostrar o separador <
$b = mostrar o separador |
$q = mostrar o separador =
$$ = mostrar o sinal $
$t = mostrar a hora
$d = mostrar a data
$v = mostrar a versão do sistema
$n = mostrar unidade atual
$h = retroceso. Apaga o caracter previo
$e = esc. Mostra o sinal corresponde a asci 27
Por isso se colocarmos prompt $p$g o cursor mostra a tragetória de onde estamos e logo o separador. É possível o texto ( por exemplo prompt Meu_nome $p$g
DATE
Ver/por a data do sistema
TIME
Ver/por a hora do sistema
VER[/font]
Versão do sistema
VOL unidade
Volume da unidade especificada
MEM parametros
Mostra a memoria usada e livre no sistema
/p -> mostra por programas
/d -> por programas econtroladores
/c -> classifica por tamanho
Comandos de manipulação de arquivos
COPY origem destino
Serve para copiar arquivos de um lugar a outro. A origem deve ser um trajeto completo de onde estão os arquivos a copiar. Se se omite se entende no diretório atual.
O destino deve ser uma trajetória completa de onde desejar o/os arquivo(s)
copy meuarquivo.txt c:\ (copiá-lo do diretorio raíz de C)
copy meuarquivo.txt c:\meuarq.txt (copiá-lo e poder mudar o nome a meuarq.txt)
copy *.txt a:\ (copiar todos os arquivos que tenham a extensão txt a unidade A)
copy *.txt c:\meusdo~1 (copiar todos os que tenham a extensão txt ao diretório Meus documentos ( cujo o nome curto é meusdoc~1).
DEL arquivo(s)
Apagar arquivos selecionados
del lol.txt (apaga o arquivo lol.txt no diretório atual)
del c:\lol.txt (apaga o arquivo lol.txt que se encontra no c:\)
del arquiv~1\*.*(apaga os arquivos que se encontram no diretório ‘Arquivos de programa’ cujo nome curto é arquiv~1( não se apaga as subpastas)
DELTREE arquivo(s) -y
Apaga o diretório especificado ( se é um arquivo coloca o arquivo, se é uma pasta coloca a pasta com todas as subpastas que incluam).
Com o parametro -y não exige confirmação.
DIR trajeto
Mostra uma lista do conteúdo do diretório especificado no trajeto. Se não especificado nada, se entende o atual.
Se coloca como parametro /W mostra uma lista resumida
Se coloca como parametro /P mostra uma lista utilizando o filtro more.
ATTRIB arquivo(s)-> Mostra os arquivos dos diretórios indicados e nesse caso permite mudá-los.
os atributos são:
H -> oculto. Se ativa com +h e desativa com -h
R -> Leitura. Apenas leitura com +r, normal com -r
S -> Sistema. Se ativa com +s e desativa com -s
A -> Modificado. Para copias de segurança incrementadas. +a indica modificado e -a indica não modificado.
Attrib arquivostorm.txt (mostrar os atributos do arquivostorm.txt)
attrib *.exe +r +r +s (coloca todos os arquivos com extensão exe como ocultos, do sistema e a apenas lê)
RENAME o REN nome1 nome2
Mudar o nome do arquivo
Ren nome1.txt nome2.txt
TYPE arquiivo
Mostra
por pasta o conteúdo do arquivo;
type nomedoarquivo.txt
Obs: Se você precisar de mais detalhes sobre cada um dos comandos basta digitar no MS-DOS (ou no prompt de comando do Windows) [comando]/? Todos comandos de MS-DOS também entram nesta lista incluindo chamadas de outros programas para este sistema.
Comandos para programação
EDIT arquivo
Editor de textos utilizado para editar scripts e arquivos de texto.
DEBUG arquivo parametros de arquivo
Inicia o desassembler com o programa indicado que se colocam por parametros.
CHOICEtexto opções
Se utiliza em programas bat para permitir a um usuario entre um conjunto de opções
A resposta se devolve mediante a variável errorlevel
choice Escolha uma opçao snc
if errorlevel 1 goto …
if errorlevel 2 goto …
if errorlevel 3 goto …
Variáveis
A condição DEFINED verifica se uma variável já foi definida. Por exemplo, se a variável “x” estiver definida, então o resultado será positivo, senão negativo.
Veja como ficaria:
@ECHO OFF
IF DEFINED x ( ECHO Positivo ) ELSE ( ECHO Negativo )
Arquivos
A condição EXIST verifica se existe algum arquivo. Por exemplo, se existir o arquivo “exemplo.bat” o resultado será positivo, senão negativo.
Veja como ficaria:
@ECHO OFF
IF EXIST exemplo.bat ( ECHO Positivo ) ELSE ( ECHO Negativo )
Esta condição não para por aí. No sistema MS-DOS, você pode fazer uma “pesquisa” na pasta em que está por um arquivo digitando parte dele. Você usa “*” para indicar a(s) parte(s) que você não sabe. Por exemplo, se existir algum arquivo com a extensão “.bat” na pasta atual o resultado será positivo, senão negativo.
Veja como ficaria:
@ECHO OFF
IF EXIST *.bat (ECHO Positivo ) ELSE ( ECHO Negativo )
X é igual a 6?
@ECHO OFF
CLS
SET X=6
IF “%X%” == “6″ GOTO ok
ECHO X não é igual a 6, X é igua a %X%
GOTO saida
: ok
ECHO X é igual a 6
:saida
Na primeira linha. O “@” indica que não é para aparecer o comando que segue, no caso, “ECHO” (Comando que escreve na janela). Nesta linha, eu estou grosseiramente mandando o MS-DOS calar a boca (não falar nada sem eu mandar), pois se ECHO faz o computador “falar”, ECHO OFF faz o computador “desligar a boca” e com o @ no começo da linha, ele nem vai informar ao usuário que está parando de falar.
Na segunda linha, o comando CLS faz o MS-DOS apagar toda a tela.
Na terceira linha, como já foi explicado, faz a variável X=6.
Na quarta linha, é uma linha condicional. Se “X” for igual à 6 vá para “ok”.
Na quinta linha, é óbvio que X não vai ser igual a 6, então o MS-DOS vai “falar” X não é igual a 6, X é igua a [valor de x].
Na sexta linha, ele irá para o ponto “saida” porque o resto é feito se X for igual a 6.
Na sétima linha, está sendo definido o ponto “ok”, aquele ponto citado na quarta linha.
Na oitava linha, X será igua a 6, então o MS-DOS vai dizer X é igual a 6.
E na nona linha, é definido o ponto-final do processamento. Que é chamado na sexta linha, nada mais que isso, então o MS-DOS entende que o batch concluiu.
Faça o teste
1. Abra o Bloco de notas do Windows;
2. Copie o exemplo acima e cole nele;
3. Salva-o como exemplo.bat;
4. Dê dois-clicks nele observe o que acontecerá;
5. Agora experimente modificar a terceira linha por SET X=qualquer coisa;
6. Execute e veja o que acontece.
Mensagem de acordo com a idade
@ECHO OFF
SET idade=19
IF %idade% LSS 10 (
ECHO Bom dia rapaz!
ECHO.
ECHO Você não vai pra faculdade?
) ELSE (
IF %idade% LSS 18 (
ECHO Bom dia rapaz!
ECHO.
ECHO Você não vai pra faculdade?
) ELSE (
IF %idade% LEQ 64 (
ECHO Bom dia!
ECHO.
ECHO Você não vai trabalhar hoje?
) ELSE (
ECHO Bom dia!
ECHO.
ECHO Tudo bem?
)
)
)
Esta é uma forma mais avançada de usar o comando condicional IF. Isso é quase idêntico a Algoritmo. Ele avalia a variável %idade%. Se %idade% for menor que 10 então escreva tal; Senão, se %idade% for menor que 18 então escreva tal; Senão se %idade% for menor ou igual a 64 então escreva tal; Senão obviamente %idade% é maior que 64, então imprima tal.
Faça o teste
1. Abra o Bloco de notas do Windows;
2. Copie o exemplo acima e cole nele
3. Salva-o como exemplo2.bat;
4. Dê dois-clicks nele observe o que acontecerá;
5. Agora experimente modificar a segunda linha por SET idade=n (troque n por algum número);
6. Execute e veja o que acontece.
Programando;
Existe uma infinidade de comandos, como mostrei acima, e só usar a imaginação, para fechar esse tutorial, vou abordar alguns códigos feito por mim.
Exemplo 1 (Intermediário/Avançado)
@echo offclsEcho Batch feito por Storm
Echo .
Echo .
Echo Começar o programa.
pause
Echo .
Echo .
Echo .
Echo Este programa cria uma chave de inicializaçao de um arquivo no windows através do menu.
Echo .
Echo .
Echo [1] Desejo que esse arquivo se inicie no seu proximo logon.
Echo [2] Desejo sair do programa.Set /p choice=Digite o numero correspodente a sua opçao:
if “%choice%”==”2″ goto op2
if “%choice%”==”1″ goto op1rem Bloco de declaraçao dos gotos
p1 reg add “hklm\Software\Microsoft\Windows\CurrentVersion\Run” /v teste2 /t REG_SZ /d c:\path\batstorm.bat&goto proximo
p2 exit
:proximo
Echo .
Echo .
Echo Chave criada com sucesso.
Echo .
Echo .
Agora mostrarei a chamada de um outro arquivo bat sem a interrupção do arquivo.
Echo [1] Desejo chamar o arquivo batstorm.bat.
Echo [2] Desejo sair do programa.Set /p choice=Digite o numero correspondente a sua opçao:
if “%choice%”==”2″ goto op3
if “%choice%”==”1″ goto op4
p3 call batstorm.bat&goto proximo2
p4 exit
Bom, meio trabalhoso o tutorial de programação batch, mas espero que tenha valido a pena todo o meu trabalho e espero que apreciem todo o tutorial, fiz de coração.
Qualquer dúvida, sugestão, comentário, crítica,
Obs: Esse POST foi encontrado em um forum na NET, fiz apenas algumas (pequenas) alterações mas estou colocando abaixo as referências do autor e do POST original.
Pedro César
——————————————————- 8< ——————————————————————–
Autor: Storm
E-mail do autor: boot.unknown@hotmail.com
Auxílio e Comentários: Elhacker e Google
Outra fonte muito interessante: http://www.computerhope.com/batch.htm







September 19th, 2009 at 6:56 pm
Muito bom esse tutorial…
Me ajudou bastante!
Obrigado.
November 18th, 2009 at 7:15 am
Os comandos estão interessantes, mas o Português está sofrível. O path de um arquivo é seu caminho, não “trajeto”, nem “trajetória”.