Pré-texto Para montarmos um arquivo.bat devemos ter um amplo conhecimento das funções do Prompt de Comando, também chamado de MS-DS e de CMD. !este tutorial al"uns comandos ser#o abordados mas para maiores informações de comandos do CMD dei$o este lin%& http&''(((.babooforum.com.br'forum'inde$.p...ho(topic)*+ Já adiantando...
Para qualquer comando no CMD, para saber suas funções, basta di"itar o nome do comando mais /? e teclar /enter/ Para vermos uma lista de comandos di"itamos help
Se formos apertando a seta superior, os comandos antes di"itados v#o aparecendo, do 0ltimo ao primeiro Para selecionarmos um subdiret1rio, é s1 ir clicando 234 que eles v#o aparecendo. 5 usado em cd, dir, etc. Para colarmos um te$to temos que usar o mouse, pois o Ctrl67 n#o funciona 2anto fa8 se usarmos letras mai0sculas ou min0sculas, pois antes de ser feita a interpretaç#o do pro"rama é feita a traduç#o das letras para mai0sculas. 3"ora sim podemos ir propriamente ao tutorial de batch files...
P.S.: s e$emplos e$ecutam e saem direto. Para ver o que eles fa8em
acrescentem o comando pause para ele esperar que voc9 aperte uma tecla, porém assim aparecer: ;pressione qualquer tecla para continuar. . .< para n#o aparecer nenhuma mensa"em utili8e o comando pause >nul .
1
Introdução 3ntes de tudo, indicar o porqu9 os processos s#o chamados batch. 3 ra8#o por ele se chamar bat é porque no ms-dos requere-se como m:$imo tr9s letras na e$tens#o e por tanto os arquivos tem a e$tens#o .bat =ste tipo de arquivo pode ser muito peri"oso, pois eles s#o capa8es de destruir o sistema operacional sem o usu:rio saber deletando a pasta principal, enchendo o >D, desconfi"urando a iniciali8aç#o do sistema, entre outros. Por isso é recomendado que apenas e$ecute ?obs batch conhecidos. !o (indo(s, estes arquivos podem ser facilmente editados clicando com o bot#o direito do mouse nele e clicando em =ditar. 7oc9 pode fa8er um utili8ando o bloco de notas do (indo(s onde cada linha é um comando diferente de MS-DS e ao final, salve-o sempre com o final do nome .bat @porAe$emplo.batB.
!ue se pode "a#er co$ eles? Pode fa8er de forma automati8ada tudo aquilo que se pode fa8er no console do ms-dos.
%o$o "aça u$ ar!ui&o 'at? Coloque em te$to. 3penas decidir onde colocar, pode coloc:-lo no bloco de notas ou al"um editor ascii. 3o "uard:-los devem ter a notaç#o de nomes pr1prios do ms-dos. =ste nome com no m:$imo letras @espaço e n#o s#o permitidosB lo"o um ponto e a e$tens#o que neste caso é obri"atoriamente bat.
%o$o posso selecionar &ários ar!ui&os? Para ele tem que se levar em conta os nomes dos arquivos, devem cumprir a notaç#o do msdos @ letras sem espaço como m:$imo, lo"o um ponto e tr9s letras como m:$imo da e$tens#o. Pode se utili8ar os comandosE F=quivale a v:rios caracteres. G=quivale a apenas um caracter.
(xe$plos:
2
comando F.doc -H selecionar todos os arquivos que tenham a e$tens#o doc. comando aF.doc -H selecionar todos os arquivos que comecem por a e tenha a e$tens#o doc. comando aFb.doc -H selecionar todos os arquivos que comecem por a, acabem por b e tenham a e$tens#o doc. comando FmaoF.doc -H selecionar todos os arquivos que contenham /mao/ e tenham a e$tens#o doc. comando cGmao.doc -H selecionar todos os arquivos que contenham /c/, lo"o um carater qualquer e lo"o /mao/. Deve ter tambem a e$tens#o doc. comando cGbF.F -H selecionar todos os arquivos que comecem por /c/, tenham um caracter qualquer, lo"o um b e qualquer e$tens#o. comando F.bGt -H selecionar todos os arquivos que tenham a e$tens#o que comece por b, lo"o um caracter qualquer e lo"o um t.
)ue$ são as tra*et+rias e os patchs? 3 tra?et1ria é o nome completo de um arquivo e indica a situaç#o e$ata de um arquivo e seu nome. Se di"o que o arquivo se chama arquivo.t$t indico seu nome, mas nada mais. Se supoe que se encontra no diret1rio atual. Se di"o c&arquivo.t$t indico que o arquivo que me interesse se chama arquivo.t$t e se encontra no diret1rio r:i8 de C. Dado que no ms-dos nao se admite nomes "randes @ mais de letras B nem espaço, quando quero utili8ar o nome do (indo(s em ms-dos devo saber que este ser: reconvertido em seu nome curto. =ste se obtém os seis primeiros caracteres v:lidos do nome, lo"o o sinal I @alt *JKB e lo"o um n0mero.
)ue co$andos pode$os utili#ar? %o$andos 3qui est#o al"uns comandos utili8ados em batch. (% $ensae$ ou &ariá&el0
=screve na tela
3
(% 11
Desativa as informações e confirmações feitas pelo sistema. Como LC&HL, L2em certe8a que dese?a fa8er talGL....
(% 2
3tiva as informações e confirmações do sistema.
(%.
Pula uma linha S=2 vari:vel)valor Cria ou modifica uma vari:vel @espaço reservado temporariamente na mem1ria 3M para "uardar al"umas informações numéricas, de caracteres, positivo'ne"ativo entre outros. !#o podem ter acento e devem começar com letraB. Para chamar a vari:vel posteriormente basta coloc:-la entre LNL. Por e$emplo& %3( SET nome=Tex ECHO O nome dele é %nome%
%ondiç4es
O !uméricas e Caracteres& o "ual @=QR ou ))B o Diferente @!=QB o Menor que @SSB o Menor ou i"ual a @=QB o Maior que @T2B o Maior ou i"ual a @T=QB o Condiç#o ne"ativa @!2B O 7ari:veis& o Definido @D=U!=D Vvari:vel sem NWB o Condiç#o ne"ativa @!2B
4
O =m arquivos& o =$iste @=XS2B o Condiç#o ne"ativa @!2B
s s5$'olos aci$a &6$ das seuintes "ontes:
=QR vem da palavra in"lesa =QRals @"ualB. !=Q vem da palavra in"lesa !ot =Quals @!#o-"ual, diferenteB SS vem da palavra in"lesa eSS @MenorB =Q vem da palavra in"lesa ess or =Quals @Menor ou "ualB T2 vem da palavra in"lesa Trea2e @MaiorB T=Q vem da palavra in"lesa Treater or =Quals @Maior ou "ualB !2 é uma palavra in"lesa que si"nifica !#o D=U!=D é uma palavra in"lesa que si"nifica Definido =XS2 é uma palavra in"lesa que si"nifica =$iste
%aracteres
3s condições numéricas e de caracteres s#o i"uais, porém avaliam de maneira diferente. Por e$emplo, se compararmos L3naL com Danielle na condiç#o =Q @Menor ou i"ualB, ser: avaliado o tamanho . L3naL tem + bYtes e LDanielleL tem . =nt#o LDanielleL é maior que L3naL e a condiç#o é positiva. 7e?a como ficaria&
%3(
@ECHO OFF SET nome1=Ana SET nome2=Danielle REM O resultado da condição abaixo será positivo IF "%nome1%" LEQ "%nome2%" ( ECHO Positivo ) ELSE ( ECHO Negativo )
5
2u$éricas
!as condições numéricas n#o h: mistério, as duas 0nicas diferenças entre as condições numéricas e de caracteres é que nas numéricas s#o avaliados os n0meros, n#o o tamanho, e que voc9 n#o usa aspas. 7amos supor que a 3na tem J+ anos e que a Danielle tem *. Se compararmos as suas idades respectivamente usando SS @Menor queB o resultado ser: ne"ativo. 7e?a como ficaria&
%3( @ECHO OFF SET ana=23 SET danielle=19 RO EM resultado da condição abaixo será negativo IF %ana% LSS %danielle% ( ECHO Positivo ) ELSE ( ECHO Negativo )
7ariá&eis
3 condiç#o D=U!=D verifica se uma vari:vel ?: foi definida. Por e$emplo, se a vari:vel L$L estiver definida, ent#o o resultado ser: positivo, sen#o ne"ativo. 7e?a como ficaria&
%3( @ECHO OFF IF DEFINED x ( ECHO Positivo ) ELSE ( ECHO Negativo )
8r!ui&os
3 condiç#o =XS2 verifica se e$iste al"um arquivo. Por e$emplo, se e$istir o arquivo Le$emplo.batL o resultado ser: positivo, sen#o ne"ativo. 7e?a como ficaria&
%3(
6
@ECHO OFF IF EXIST exemplo.bat ( ECHO Positivo ) ELSE ( ECHO Negativo )
=sta condiç#o n#o para por aZ. !o sistema MS-DS, voc9 pode fa8er uma LpesquisaL na pasta em que est: por um arquivo di"itando parte dele. 7oc9 usa LFL para indicar a@sB parte@sB que voc9 n#o sabe. Por e$emplo, se e$istir al"um arquivo com a e$tens#o L.batL na pasta atual o resultado ser: positivo, sen#o ne"ativo. 7e?a como ficaria& %3( @ECHO OFF IF EXIST *.bat (ECHO Positivo ) ELSE ( ECHO Negativo )
:no$edolin9
!omeia um ponto do arquivo de lote permitindo avançar ou voltar a e$ecuç#o a partir daquele ponto.
%S
=sse comando limpa toda a tela. Cear Screen.
;%o$ando0
Desativa as informações e confirmações feitas pelo sistema apenas para esta linha.
I1 condição0 < ação0 = (S( < ação0 =
=sse é um comando condicional. LSe condiç#o faça aç#o, sen#o faça aç#oJL. Por e$emplo&
%3(
7
@ECHO OFF SET nome=Tex IF "%nome%"=="Tex" ( ECHO Ola Tex! ) ELSE ( ECHO Ola %nome%! )
@ ponto0
3vança ou volta a e$ecuç#o para um ponto do arquivo de lote.
1A / BB&aria&el I2
epete um comando varias ve8es fa8endo incrementações até o fim ser atin"ido. /, é uma opç#o do comando U que fa8 as incrementações. BB&ariá&el, é o nome da vari:vel que vai ser incrementada. inicio, é o valor de inicio da vari:vel que ser: incrementada. incre$ento, n0mero que ser: somado a cada incrementaç#o. "i$, a repetiç#o ir: acabar quando o valor da vari:vel atin"ir este valor. co$ando, um comando que ser: repetido. parC$etro0, o par[metro do comando que ser: repetido.
Por e$emplo& \=C> UU U ' NNa ! @*,*,B D =C> valor de 3 é NNa
P8DS(
Ua8 uma pausa e s1 volta quando o usu:rio apertar al"uma tecla do teclado.
A(E co$entário0
=ste comando n#o fa8 absolutamente nada. =le é utili8ado para inserir coment:rios nos arquivos.
8
PAEP@
Serve para abrir o prompt do MS-dos. mais habitual é ]p]" que corresponde aE Fp ) mostrar tra?eto atual F ) mostrar o separador H Fl ) mostrar o separador ^ F' ) mostrar o separador _ F! ) mostrar o separador ) FF ) mostrar o sinal ] Ft ) mostrar a hora Fd ) mostrar a data F& ) mostrar a vers#o do sistema Fn ) mostrar unidade atual Fh ) retrocesso. 3pa"a o caractere prévio Fe ) esc. Mostra o sinal corresponde a 3SC J
Por isso se colocarmos prompt FpF o cursor mostra a tra?et1ria de onde estamos e lo"o o separador. 5 possZvel o te$to @ por e$emplo pro$pt EeuGno$e FpF B.
38@(
7er'por a data do sistema
@IE(
7er'por a hora do sistema
7(A/"ont0
7ers#o do sistema Vfont)7erdanaW7 unidade 7olume da unidade especificada
E(E parC$etros
Mostra a mem1ria usada e livre no sistema /p -H mostra por pro"ramas /d -H por pro"ramas controladores /c -H classifica por tamanho
9
%o$andos de $ane*os de ar!ui&os
%PH orie$ destino
Serve para copiar arquivos de um lu"ar a outro. 3 ori"em deve ser um tra?eto completo de onde est#o os arquivos a copiar. Se se omite se entende no diret1rio atual. destino deve ser uma tra?et1ria completa de onde dese?ar o'os arquivo@sB copY meuarquivo.t$t c& @copi:-lo do diret1rio rai8 de CB copY meuarquivo.t$t c&meuarq.t$t @copi:-lo e poder mudar o nome a meuarq.t$tB copY F.t$t a& @copiar todos os arquivos que tenham a e$tens#o t$t a unidade 3B copY F.t$t c&meusdoI* @copiar todos os que tenham a e$tens#o t$t ao diret1rio Meus documentos @ cu?o o nome curto é meusdocI*B.
8paar ar!ui&os selecionados
3( ar!ui&o
del lol.t$t @apa"a o arquivo lol.t$t no diret1rio atualB del c&lol.t$t @apa"a o arquivo lol.t$t que se encontra no c&B del arquivI*F.F@apa"a os arquivos que se encontram no diret1rio /3rquivos de pro"rama/ cu?o nome curto é arquivI*@ n#o se apa"a as subpastasB
3(@A(( ar!ui&o
3pa"a a rai8 especificada @ se é um arquivo coloca o arquivo, se é uma pasta coloca a pasta com todas as subpastas que incluamB. Com o par[metro -Y n#o per"unta cada ve8 =ste comando na realidade n#o é um comando sim uma utilidade incluZda no ms-dos.
3IA tra*eto
Mostra uma lista do conte0do do diret1rio especificado no tra?eto. Se n#o especificado nada, se entende o atual. Se coloca como par[metro '` mostra uma lista resumida Se coloca como par[metro 'P mostra uma lista utili8ando o filtro more.
Para pes!uisar u$ ar!ui&o: dir's diret1rio&arquivo.e$tensao
=$.& Procurar o arquivo lista.t$t em C
1
3ir/s c:lista.txt
8@@AIK ar!ui&o
Mostra os arquivos dos diret1rios indicados e nesse caso permite mud:-los. os atributos s#o& -H oculto. Se ativa com 6h e desativa com -h A -H eitura. 3penas leitura com 6r, normal com -r S -H Sistema. Se ativa com 6s e desativa com -s 8 -H Modificado. Para copias de se"urança incrementado. 6a indica modificado e -a indica n#o
modificado. 3ttrib arquivote$.t$t @mostrar os atributos do arquivote$.t$tB attrib F.e$e 6r 6r 6s @coloca todos os arquivos com e$tens#o e$e como ocultos, do sistema e a apenas l9B.
A(28E( ou A(2 no$eL no$e
Mudar o nome do arquivo en nome*.t$t nomeJ.t$t
@HP( ar!ui&o
Mostra por pasta o conte0do do arquivoE tYpe nomedoarquivo.t$t
F 2odos aqui listados s#o comandos de MS-DS que foram criados especificamente para arquivos de lote. Se voc9 precisar de mais detalhes sobre cada um deles basta di"itar no MS-DS @ou no prompt de comando do `indo(sB VcomandoW'G 2odos comandos de MS-DS também entram nesta lista incluindo chamadas de outros pro"ramas para este sistema.
%o$andos para prora$ação
(3I@ ar!ui&o
=ditor de te$tos utili8ado para editar scripts e arquivos de te$to.
3(KD ar!ui&o parC$etros de ar!ui&o
nicia o desassembler com o pro"rama indicado que se colocam por par[metros.
1
%I%( texto opç4es
Se utili8a em pro"ramas bat para dar ele"ir a um usuario entre um con?unto de opções 3 resposta se devolve mediante a vari:vel errorlevel choice =le?a uma opç#o snc if errorlevel * "oto ... if errorlevel J "oto ... if errorlevel + "oto ... =ste e$emplo mostra a lateral Lele?a uma opç#o e da a ele"er s @simB, n @n#oB o C @continuarB por e$emplo as tres se"uintes linhas especificam aonde deve sair o flu$o do pro"rama se"uido da tecla pulsada.
7ariá&eis 3 condiç#o 3(1I2(3 verifica se uma vari:vel ?: foi definida. Por e$emplo, se a vari:vel L$L estiver definida, ent#o o resultado ser: positivo, sen#o ne"ativo. 7e?a como ficaria&
%3( @ECHO OFF IF DEFINED x ( ECHO Positivo ) ELSE ( ECHO Negativo )
8r!ui&os 3 condiç#o =XS2 verifica se e$iste al"um arquivo. Por e$emplo, se e$istir o arquivo Le$emplo.batL o resultado ser: positivo, sen#o ne"ativo. 7e?a como ficaria&
%3( @ECHO OFF IF EXIST exemplo.bat ( ECHO Positivo ) ELSE ( ECHO Negativo )
=sta condiç#o n#o para por aZ. !o sistema MS-DS, voc9 pode fa8er uma LpesquisaL na pasta
1
em que est: por um arquivo di"itando parte dele. 7oc9 usa LFL para indicar a@sB parte@sB que voc9 n#o sabe. Por e$emplo, se e$istir al"um arquivo com a e$tens#o L.batL na pasta atual o resultado ser: positivo, sen#o ne"ativo. 7e?a como ficaria&
%3( @ECHO OFF IF EXIST *.bat (ECHO Positivo ) ELSE ( ECHO Negativo )
(M(EP: x é iual a N?
%3( @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
2a pri$eira linha . L\L indica que n#o é para aparecer o comando que se"ue, no caso,
L=C>L @Comando que escreve na ?anelaB. !esta linha, eu estou "rosseiramente mandando o MS-DS calar a boca @n#o falar nada sem eu mandarB, pois se =C> fa8 o computador LfalarL, =C> UU fa8 o computador Ldesli"ar a bocaL e com o \ no começo da linha, ele nem vai informar ao usu:rio que est: parando de falar. 2a seunda linha , o comando CS fa8 o MS-DS apa"ar toda a tela. 2a terceira linha , como ?: foi e$plicado, fa8 a vari:vel X)K. 2a !uarta linha , é uma linha condicional. Se LXL for i"ual K v: para Lo%L. 2a !uinta linha , é 1bivio que X n#o vai ser i"ual a K, ent#o o MS-DS vai LfalarL X n#o é i"ual
a K, X é i"ua a Vvalor de $W. 2a sexta linha , ele ir: para o ponto LsaidaL porque o resto é feito se X for i"ual a K. 2a séti$a linha , est: sendo definido o ponto Lo%L, aquele ponto citado na quarta linha. 2a oita&a linha , X ser: i"ua a K, ent#o o MS-DS vai di8er X é i"ual a K. ( na nona linha , é definido o ponto-final do processamento. Que é chamado na se$ta linha,
1
nada mais que isso, ent#o o MS-DS entende que o batch concluiu.
1aça o teste *. 3bra o 4loco de notas do `indo(sE J. Copie o e$emplo acima e cole neleE +. Salva-o como e$emplo.batE . D9 dois-clic%s nele observe o que acontecer:E . 3"ora e$perimente modificar a terceira linha por S=2 X)qualquer coisaE K. =$ecute e ve?a o que acontece. Mensa"em de acordo com a idade&
%3( @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? ) ) )
1
=sta é uma forma mais avançada de usar o comando condicional U. sso é quase id9ntico a 3l"oritmo. =le avalia a vari:vel NidadeN. Se NidadeN for menor que * ent#o escreva talE Sen#o, se NidadeN for menor que * ent#o escreva talE Sen#o se NidadeN for menor ou i"ual a K ent#o escreva talE Sen#o obviamente NidadeN é maior que K, ent#o imprima tal.
1aça o teste *. 3bra o 4loco de notas do `indo(sE J. Copie o e$emplo acima e cole nele +. Salva-o como e$emploJ.batE . D9 dois-clic%s nele observe o que acontecer:E . 3"ora e$perimente modificar a se"unda linha por S=2 idade)n @troque n por al"um n0meroBE K. =$ecute e ve?a o que acontece.
Prora$ando =$iste uma infinidade de comandos, como mostrei acima, e s1 usar a ima"inaç#o e podemos pro"ramar uma imensid#o de finalidades, basta usar a criatividade e al"uns comandos, para fechar esse tutorial, vou abordar al"uns c1di"os feito pelo autor..
(xe$plo Inter$ediário/8&ançado
%3( @echo off
cls
Echo . Echo Começar o programa? pause Echo . Echo . Echo . Echo Este programa cria uma chave de inicializaçao de um arquivo no
1
windows através do menu. Echo . Echo . Echo [1] Deseja que esse arquivo se inicie no seu proximo logon? Echo [2] Deseja sair do programa?
Set /p choice=Digite o numero correspodente a sua opçao:
if "%choice%"=="2" goto op2 if "%choice%"=="1" goto op1
rem Bloco de declaraçao dos gotos :op1 reg add "hklm\Software\Microsoft\Windows\CurrentVersion\Ru n" /v teste2 /t REG_SZ /d c:\path\battex.bat&goto proximo
:op2 exit
:proximo Echo . Echo . Echo Chave criada com sucesso. Echo . Echo . Echo Agora mostrarei a chamada de um outro arquivo bat sem a interrupção do arquivo.
Echo [1] Deseja chamar o arquivo battex.bat? Echo [2] Deseja sair do programa?
Set /p choice=Digite o numero correspondente a sua opçao:
if "%choice%"=="2" goto op3 if "%choice%"=="1" goto op4
:op3 call battex.bat&goto proximo2
:op4 exit
1
(xe$plo
Para encerrar deixo a!ui u$ exe$plo de criação de $enu...
%3( @echo off goto lista
:lista cls echo desligar em 100 segundos -
1
echo reiniciar em 100 segundos - 2 echo cancelar desligamento -
3
echo sair -
4 echo. echo.
set /p opcao=Informe sua opcao
if /i "%opcao%"=="1" goto 1 if /i "%opcao%"=="2" goto 2 if /i "%opcao%"=="3" goto 3 if /i "%opcao%"=="4" goto 4
goto erro
:1 shutdown -s -t 100 goto lista
:2 shutdown -r -t 100 goto lista
:3
1
shutdown -a goto lista
:4 exit
:erro echo. echo. echo opcao invalida echo. echo. goto lista
=$ercicio
* - Criar J arquivos de lote com os se"uintes procedimento&
arquivo teste*.bat impa a tela Copia o arquivo do driver D& para o >D Uormata a unidade a&
3rquivo& 2esteJ.bat impa a tela verifica a versao do sistema operacional Copiar o mesmo arquivo de hd para o pendrive
J Criar um arquivo de lote para
limpar a tela verificar a data do sistema verificar hora do sistema e$ibir mensa"em ; a data e hora do sistema estao corretas< Dar pausa
1
+ Rsando o comando for criar um laço para repetir a sequencia de numero de * a * Criar um 4at para add um chave de re"istro para bloquear o painel de controle. Criar Rm bat para criar diretorios teste*, testeJ, teste+, test .
K- Criar um bat para redefinir o ip da maquina para *J.*K.+.+
1