Para navegar em pastas, usamos o comando cd
, dessa forma:
cd C:\Users
Se estiver na pasta desejada, basta digitar o caminho, assim:
cd Public
As mesmas dicas valem pra executar programas ou outros arquivos, mas não esqueça da extensão dos mesmos. Pode ser preciso colocar start
no início e também pode ser necessário colocar entre aspas, caso tenha espaços no nome, dessa forma:
"Fotos do dia.jpg"
PS: O start pode ser usado com processos, nesse caso não precisa estar no caminho pré-definido, e também, além de arquivos, também abre pastas.
O start também pode ser usado com um parâmetro de inicialização, indiciando o que o programa abrirá, por exemplo:
start firefox.exe uol.com.br
start notepad.exe C:\Users\%username%\Documents\Notas\Contatos.txt
Se quiser renomear um arquivo, use o comando ren
ou rename
seguido pelo nome antigo e o nome que o substituirá, dessa forma:
rename "Fotos do dia.jpg" pictures.jpg
Se quiser deletar um arquivo pernamentemente pelo prompt, use o comando del
, assim:
del "Fotos do dia.jpg"
Se usar o del em pastas, os arquivos dela serão excluídos, mas a pasta e os arquivos das subpastas permanecerão. Seria algo assim:
del "Nova Pasta"
Se quiser selecionar também os arquivos das subpastas, use o parâmetro /s
. As pastas permanecerão.
Para selecionar os arquivos sem pedir confirmação, use o parâmetro /q
.
Para incluir arquivos somente leitura use /f
.
Você também pode usar todos os parâmetros juntos, dessa forma:
del /q /f /s "Nova Pasta"
Também existem parâmetros como /p
para pedir confirmação, /a:r
para excluir arquivos somente leitura, /a:s
para arquivos do sistema, /a:h
para arquivos ocultos e outros, também podemos usar o -
como negação de qualquer um deles, por exemplo /a:-r
para não excluir arquivos somente leitura.
Para fazer o mesmo com pastas, usamos rmdir
ou rd
, os parâmetros /s e /q são os únicos que também podem ser usados, da mesma forma, veja um exemplo:
rmdir /s /q "Nova Pasta"
PS: Cuidado com isso.
Também podemos mover arquivos, usando o comando move
, seguido pelo caminho pro qual o arquivo será movido, dessa forma:
move "Fotos do dia.jpg" C:\Users\Public\Documents
Para copiar, usamos da mesma forma, com o comando copy
, mas caso queira copiar com outro nome, já informe o caminho com o novo nome, dessa forma:
copy picture.jpg C:\Users\Public\Documents\foto.jpg
Tanto o move quando o copy podem ser usados com o parâmetro /y
que suprime o pedido de substituição, caso exista um arquivo de mesmo nome, e da mesma forma o /-y
perguntar se desejamos substituir ele.
PS: A barra tem que ser a \
, senão não vai funcionar. Para copiar arquivos ocultos e pastas, use o xcopy
. O *
pode ser usado como coringa para vários arquivos em todos os casos (por exemplo, *.txt
afetaria todos os arquivos de texto).
Para ver os diretórios dentro das pastas, use o comando dir
.
Podemos também usar parâmetros no dir, o parâmetro /a:d
lista só diretórios, o /a:-d
para não listar diretórios (a negação também pode ser usada com outros parâmetros), /a:a
apenas arquivos, /a:h
para arquivos ocultos, /a:r
para arquivos somente leitura e /a:s
para arquivos de sistema (todos esses também podem usar a negação). Um uso dele seria dir /a:a
.
Também podemos listar apenas um tipo de extensão de arquivo, por exemplo:
dir *.dll
Ou especificar o caminho que queremos verificar, caso não queira ver o conteúdo do diretório atual:
dir C:\Users
Podemos também salvar o conteúdo do dir ou de outro comando na área de transferência usando o comando clip
, assim:
dir | clip
Para voltar um diretório, use o cd com dois pontos na frente, assim:
cd..
PS: Com um ponto, ele fica no mesmo diretório.
Você pode voltar a raiz do diretório da mesma forma, colocando uma barra após o cd, assim:
cd\
Digitar o nome do disco levará à ele, mesmo se for um removível (como D:
ou E:
).
PS: Tanto faz o lado da barra, e minúsculas não são diferenciadas. Mas alguns comandos podem não funcionar com a barra do lado errado.
Para limpar toda a tela CMD, basta executar o comando cls
.
Para desligar, usamos o comando shutdown /s
.
Para reiniciar, usamos shutdown /r
.
Para programar isso, usamos o /t 600
(o número representa os segundos), por exemplo:
shutdown /r /t 200
Usamos o parâmetro /a
para cancelar qualquer um deles. O /f
para forçar a ação. O /c
para exibir uma mensagem. E o /l
só pra fazer logoff. Veja um exemplo:
shutdown /r /t 600 /c "Reiniciaremos em 10 Minutos"
Podemos usar o comando doskey /history
para visualizar um comando já digitado. Mas se quiser repetir um comando já digitado, tecle F7 e F9.
PS: Podemos usar só o F7 e navegar até o comando para reexecutá-lo diretamente. Se usar o F9, ele reescreverá o comando sem executar novamente.
Abra o CMD e digite tasklist
para exibir os números dos códigos ativos, depois use o comando taskkill
seguido do código do processo, por exemplo:
taskkill /im 352
Usar diretamente o nome do processo também dá certo (não esqueça da extensão exe):
taskkill /im opera.exe
Em casos de processos mais teimosos, você deve usar o /f
e o /t
antes do /im
, dessa forma:
taskkill /f /t /im opera.exe
O /f força a exclusão do processo. O /t fecha processos filhos, o /im mata o processo.
Podemos usar o /pid
para especificar um processo a ser encerrado, assim:
taskkill /f /pid 1026
Para procurar e corrigir erros de disco, usamos o comando chkdsk
. Para corrigir erros do sistema de arquivos automaticamente, usamos o /f
. Para procurar setores defeituosos e tentar recuperá-los, usamos /r
.
Você também pode usar os dois comandos juntos, e também definir o disco que quer verificar, dessa forma:
chkdsk /f /r E:
E também podemos usar o chkdsk /scan /forceofflinefix
para uma verificação online, sem precisar reiniciar o PC.
Para exibir e modificar a verificação de disco usamos chkntfs C:
, também podemos usar alguns parâmetros nele.
Também podemos usar sfc /scannow
para verificar a integridade dos arquivos protegidos do sistema (necessários no Windows) e os repara. Se quiser apenas verificar os arquivos sem reparar, use o comando sfc /verifyonly
Para reparar a imagem do Windows, usamos dism /online /cleanup-image /scanhealth
, e após a verificação, usamos dism /online /cleanup-image /restorehealth
e dism /online /cleanup-image /startcomponentcleanup
.
Em sistemas 32 bits, podemos forçar o uso de PAE, que permite acessar mais memória, digitando bcdedit /set nx alwaysoff
, depois bcdedit /set pae forceenable
e reiniciando o PC.
Antes de mais nada, pode ocorrer de palavras acentuadas aparecerem com a codificação errada. Para corrigir isso basta usar o comando chcp
para isso. Nos padrões brasileiros, seriam 850, 1252 ou 65001. Veja o exemplo para mudar o código:
chcp 1252
Para apenas visualizar a página ativa, use o chcp sozinho.
PS: Ao criar arquivos BAT, é recomendado colocar chcp 1252
no começo para evitar erros de acentos, principalmente nos casos em que usaremos o BAT para escrever em arquivos.
Se quiser testar alguma frase acentuada, use o comando echo
pra isso, dessa forma:
echo Essa é uma frase com acentuação!
Ou em um arquivo:
echo Essa é uma frase com acentuação!>>C:\Users\%username%\Desktop\teste.txt
Para pular uma linha num conteúdo escrito, podemos usar echo.>>C:\Users\%username%\Desktop\teste.txt
. Podemos usar o echo com ponto apenas digitando echo.
no prompt para fazer o mesmo.
O echo pode ser usado com ou sem aspas.
No caso do CMD em si estar com os acentos desconfigurados, abra um prompt como administrador, na borda dele clique com o botão direito e vá em "Padrões".
PS: Usando dois >> ele adicionará uma nova linha no arquivo, caso exista, se usar um só > ele sobrescreverá o arquivo existente.
Para mudar o IP, podemos usar o comando ipconfig
com os parâmetros /release
(que libera o endereço IP) e na sequência o /renew
(que renova o endereço IP), dessa forma:
ipconfig /release
ipconfig /renew
PS: Isso só vale para IPv4, para IPv6 usamos /release6
e /renew6
nos parâmetros.
Lembrando que isso afeta todas as conexões. Para afetar somente uma conexão específica, use o nome específico dela, como por exemplo ipconfig /release "Conexão Local"
.
Use o ipconfig /flushdns
para liberar o cachê DNS. E depois digite ipconfig /registerdns
para registrar e atualizar o DNS. Podemos também verificar o conteúdo do cache DNS digitando ipconfig /displaydns
. Podemos inclusive parar e reiniciar os serviços DNS e DHCP com o comando net (os nomes são dnscache e dhcp), e depois reiniciar os mesmos.
Para exibir informações sobre o IP e o endereço MAC, digite ipconfig /all
.
Para conferir o ping (latência) e a conectividade das páginas ou IPs, use simplesmente o comando ping
seguido do site ou IP. O tracert
é usado para rastrear a rota de um pacote.
Para descobrir o MTU da interface, digitamos netsh interface ipv4 show subinterfaces
(pode ser ipv6
também).
Para selecionar o tamanho em bytes dos pacotes enviados pelo ping, usamos o /l
seguido do número (por exemplo, ping /l 1500 www.google.com.br
). Para selecionar a quantidade de requisições use o parâmetro /n seguido do número, por exemplo /n 6
. Para desativar a fragmentação de pacotes, usamos o /f
junto, por exemplo, ping /l 1500 /f www.google.com.br
. O parâmetro /t
envia requisições infinitas (Use Ctrl Break para uma interrupção temporária e mostrar os pacotes enviados e recebidos, para interromper totalmente use Ctrl C).
Podemos também usar parâmetros no tracert, como para aumentar a quantidade máxima de saltos com o /h, por exemplo tracert /h 60 www.google.com.br
.
PS: Tanto no ping quanto no tracert, pode ser necessário colocar /4
para forçar IPv4 ou /6
para forçar IPv6.
Para liberar o cache ARP, basta usar netsh interface ip delete arpcache
, para excluir o cache de destino use netsh interface ip delete destinationcache
, para resetar o TCP/IP usamos netsh int ip reset all
.
Ainda nos problemas de rede, podemos digitar o comando netstat /a /n /b
para verificar todas as portas abertas, os IP's e os processos aos quais elas estão conectados.
Para descobrir o endereço MAC, basta simplesmente usar getmac
no prompt. De forma mais detalhada, usamos getmac /v /fo list
.
Para vermos o cachê ARP, usamos arp /a
. Para excluir ele usamos arp /a /d
(ou um IP específico usando arp /d 1.1.1.1
, substituir o 1.1.1.1 pelo IP desejado).
Para resetar o catálogo do provedor winsock ao estado inicial, digite nbtstat /R
, nbtstat /RR
e netsh winsock reset catalog
.
Para resetar o proxy, digite netsh advfirewall reset
e netsh winhttp reset proxy
.
Podemos usar route print
para ver a rota da nossa rede. E também podemos adicionar e remover rotas especificando o IP com route add 192.168.0.0 mask 255.255.255.0 172.16.0.1
(na ordem rede a ser acessada, máscara da mesma e gateway por qual vai acessar, use a opção /p
para adicionar de forma permanente) e route delete 192.168.0.0
, respectivamente.
Podemos também utilizar o comando nslookup
assim, para vermos dados sobre o servidor do site:
nslookup -q=ns www.google.com.br
Para executar um programa como administrador com o comando runas, digite assim:
runas /savecred /user:nomedeusuario C:\Windows\notepad.exe
Ou pode ser assim também:
runas /savecred /user:nomededominio\nomedeusuario C:\Windows\notepad.exe
Isso pode ser colocado em atalhos.
Para exibir as chaves, usamos reg query
e o caminho desejado da chave, dessa forma:
reg query HKLM\Software
Para adicionar uma chave de registro pelo CMD, use o reg, dessa forma:
reg add HKLM\Software\NomeDaChave /v NomeDoValor /t REG_SZ /d "Dados do Valor" /f
O /v
é o nome do valor (pode ser usado /ve
para colocar um nome de valor vazio no valor padrão). Aspas são usadas apenas em dados de strings, outros tipos não se usam.
O /t
são os tipos de dados, que são esses (o padrão é o REG_SZ, de strings):
ID do tipo | Nome Simbólico | Significado |
---|---|---|
0 | REG_NONE | Sem tipo definido |
1 | REG_SZ | Valor de cadeia de caracteres UTF-16 |
2 | REG_EXPAND_SZ | Valor de cadeia de caracteres expansível |
3 | REG_BINARY | Dados binários |
4 | REG_DWORD | Valor DWORD, inteiro sem sinal de 32 bits |
7 | REG_MULTI_SZ | Cadeia de caracteres múltipla (lista ordenada) |
11 | REG_QWORD | Valor QWORD, inteiro de 64 bits |
O /d
são os valores a serem atribuídos ao nome do valor do registro adicionado.
O /f
força a inserção da chave sem perguntar se ela já existe e a substituí.
Caso seja pra adicionar um valor à uma chave já existente, use o mesmo método, usando o mesmo caminho da chave, com o novo nome do valor e os dados do novo valor.
reg add HKLM\Software\NomeDaChave /v NovoValor /t REG_SZ /d "Novos Dados" /f
Exemplo com valores binários:
reg add HKLM\Software\NomeDaChave /v NomeDoBinario /t REG_BINARY /d 000001 /f
Para mudar um valor já existente, basta atribuir ao valor já existente, os novos dados. Por exemplo:
reg add HKLM\Software\NomeDaChave /v NomeDoValor /t REG_SZ /d "Outros Dados" /f
PS: Os dados inseridos podem ser por exemplo, um comando para o CMD ou execução de algum programa EXE ou BAT (sem o start, apenas o caminho do mesmo), pode não funcionar pra alguns tipos de aplicações como Java. Nesse caso o tipo é o REG_SZ. E as chaves são como as pastinhas do registro, os valores são como as variáveis.
Também podemos copiar as chaves e seus valores da mesma forma, usando o copy, assim:
reg copy HKLM\Software\NomeDaChave HKCU\Software\NomeDaChave /s /f
PS: O /s copia as subchaves junto.
Se for apagar apenas um valor específico da chave, basta fazer dessa forma:
reg delete HKLM\Software\NomeDaChave /v NomeDoValor /f
Para apagar uma chave já existente, use apenas o reg delete e o /f no final para forçar a exclusão.
reg delete HKLM\Software\NomeDaChave /f
PS: Pode ser necessário colocar o nome da chave ou valor entre aspas, caso o nome tenha espaços.
Uma forma que podemos utilizar, é pra manipular conteúdos inicializados com o Windows, indo na chave Run de HKCU ou HKLM, por exemplo:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Inicializando /t REG_SZ /d "\"C:\Windows\executavel.exe\"" /f
Lembrando de HKCU é do usuário atual e HKLM é do sistema todo.
PS: Nesse caso, só utilizamos sequências de escape nas aspas, se elas existirem, as barras não utilizam, e podemos usar variáveis do sistema.
Da mesma forma, podemos utilizar esse método pra deletar o valor (inclusive podemos utilizar para excluir da inicialização programas teimosos e malwares):
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Inicializando /f
Para exibir as tarefas agendadas, use schtasks /query
.
Também podemos excluir tarefas agendadas, usando o schtasks /delete
, dessa forma:
schtasks /delete /f /tn "Driver Booster Scheduler"
PS: O /tn
é o que especificará o nome da tarefa a ser excluída.
Essas opções acima costumam ser utilizadas com outros parâmetros, como adicionar, por exemplo.
Para administrar os serviços inicializados ou parados, usamos o net
seguido da opção desejada, dessa forma:
net start service_name
net stop service_name
net pause service_name
net continue service_name
PS: Para ver os serviços usados, utilize o comando sc query
.
Para gerenciar e também excluir serviços, usamos o sc
com os seguintes parâmetros:
sc start service_name
sc stop service_name
sc pause service_name
sc continue service_name
sc create service_name
sc delete service_name
Para criar um usuário novo com senha, basta digitar isso:
net user nomedousuario senha /add
PS: Caso queira criar um usuário sem senha, basta omití-la.
Caso queira adicionar/alterar a senha de um usuário local, digite isso:
net user nomedousuario novasenha
Para dar privilégios de administrador ao usuário criado:
net localgroup administradores nomedousuario /add
Para remover o usuário dos administradores:
net localgroup administradores nomedousuario /delete
Para excluir um usuário:
net user nomedousuario /delete
Para listar os usuários existentes:
net localgroup usuários
Para listar os administradores:
net localgroup administradores
Pode ser que, caso o sistema não esteja configurado em português, que tenha que usar users
e administrators
ao invés de usuários e administradores.
PS: Rode como administrador esses comandos.
Agora que vimos alguns comandos do Windows, veja alguns dos comandos mais usados:
cd "pasta"
(chdir
)- Abre uma pasta.cls
- Limpa a tela.color xx
- Muda a cor da tela, usando números para cores, o primeiro é o fundo do CMD e o segundo é a cor.date /t
- Mostra a data do sistema.dir
- Exibe a lista de arquivos (podendo receber como parâmetro *.extensao
, para listar apenas um tipo de arquivo, ou mesmo mais de um).diskcopy "origem" "destino"
- Copia o conteúdo de um disco para o outro.md "pasta"
(mkdir
) - Cria uma pasta.time /t
- Mostra a hora do sistema.title "Nome"
- Define um nome pra janela.tree
- Mostra a estrutura de pastas graficamente.ver
- Mostra a versão do Windows.vol
- Mostra o nome e o número de série do sistema.echo off
- Oculta os comandos e o caminho na tela. Usado com @
no início do BAT para ocultar comandos (no BAT, o arroba oculta o caminho de qualquer comando, usando apenas no echo off no começo dispensa a necessidade de usar arrobas em outros comandos num mesmo BAT).echo
- Para escrever na tela, não aceita sequências de escape. O echo com um ponto ao lado pula uma linha.set variavel=dados
- Cria variáveis. As variáveis são utilizadas entre dois símbolos de porcentagem, na forma %variavel%
. Para cálculos aritméticos use o parâmetro /a
.rem
- Para comentários (Pode utilizar ::
no lugar dele).pause
- Isso pausará o prompt até uma tecla ser clicada (ao usar pause>nul
, a mensagem pressione qualquer tecla é oculta).start
- Usada para abrir um programa, pasta ou site (incluindo coisas como start chrome.exe www.google.com.br
).move "origem" "destino"
- Para mover arquivos.copy "origem" "destino"
- Para copiar arquivos (ao usar copy con arquivo.tipo
, criará um arquivo novo), aí você insere os dados e tecla Ctrl Z e Enter pra copiar.xcopy "origem" "destino"
- Para copiar também arquivos somente leitura de subpastas e diretórios (como xcopy C:\Users\%username%\Imagens E:\Imagens
).goto
- Significa "vai para", usamos um parâmetro para redirecionar à um marcador de menu ou submenu (como if %op%==1 (goto A)
, que vai para o marcador :A
):
- Marcador de menu ou submenu, para mostrar uma opção de escolha, usado junto com o goto (como :A
).&
- Para "grudar" mais de um comando numa mesma linha.echo "texto">>"arquivo"
- Escreve num arquivo, e não no prompt (por exemplo, echo teste>>C:\Users\%username%\Desktop\teste.txt
). Se o arquivo não existir, será criado. Da mesma forma, as setas podem ser utilizadas com funções do echo e outros comandos, por exemplo dir>>arquivo.txt
escreve o conteúdo de dir no arquivo especificado. Usando um >
ele sobreescreve o arquivo caso exista, usando dois >>
ele adiciona o texto no arquivo caso exista.type
- Lê o Arquivo no CMD (como type C:\Users\%username%\Desktop\teste.txt
).findstr
- Procura as palavras escritas pelo usuário, quando usamos o parâmetro /i ele não diferencia maiúsculas (como findstr /i PALAVRA C:\Users\%username%\Desktop\teste.txt
)rename nomeantigo.txt nomeatual.txt
- Renomeia arquivos e pastas.net
- Usado com os comandos start
, stop
, pause
e continue
para iniciar, parar, pausar e continuar serviços do Windows. Também usado para administrar usuários com os comandos user
e localgroup
del "nomedoarquivo"
(erase
) - Para excluir arquivos e conteúdos de pastas (para excluir pastas use rd
ou rmdir
, da mesma forma).doskey /history
- Mostra o histórico de comandos já digitados.shutdown
- Para desligar o computador (com parâmetro /s
) ou reiniciar (parâmetro /r
), pode ser definido o tempo para a operação com o parâmetro /t 600
(em segundos). Para anular qualquer um deles use o parâmetro /a
.chkdsk C:
- Para corrigir erros de disco.sfc /scannow
- Verifica a integridade dos arquivos no sistema e os repara.tasklist
- Mostra os processos ativos no sistema.taskkill /pid 3806
- Mata um processo baseado no seu PID (se quiser usar o nome literal, use /im processo.exe
).ipconfig
- Para configurações de redes, basicamente com /release
libera o endereço IP e /renew
o renova, e /all
mostra detalhes completos das interfaces de rede (ele sozinho mostra detalhes resumidos).ping nomeouipdosite.com
- Verifica se há conectividade num host.tracert nomeouipdosite.com
- Rastreia a rota de um pacote até o host especificado.netstat /nb
- Verifica quais portas estão abertas e os IPs associados a elas.whoami
- Mostra usuários logados no sistema.driverquery
- Para verificar os drivers instaladossysteminfo
- Exibe informações do sistema.sc
- Gerenciar serviços (por exemplo, parar, iniciar, pausar e excluir).diskpart
- Gerencia partições de disco.verify
- Faz com que o Windows verifique se os arquivos estão gravados corretamente em um disco.format "destino" /fs:NTFS
- Formata um disco especificado em um formato especificado (NTFS, FAT32 ou exFAT). Podemos colocar um rótulo no volume com o parâmetro /v:nomedovolume
.help
- Exibe a ajuda.hostname
- Retorna o nome do host do computador.exit
- Fecha o Prompt.Para interromper algum comando sendo executado, dê um Ctrl C. Para ajuda a um comando, digite ele seguido de /?
, como por exemplo dir /?
.
Como coringa, usamos o *, podendo inclusive usar nas extensões, como *.*. E comandos do CMD não são case-sensitive.
A variável %errorlevel%
guarda o status do último comando executado. Se o mesmo foi executado corretamente, ele retornará 0
, se o comando der erro ele retornará outro número diferente de zero (por exemplo, comando não encontrado retorna 9009
). Podemos visualizar o conteúdo dessa variável digitando no prompt echo %errorlevel%
. Esse código também pode ser usado em BAT Script também, como em condicionais e laços de repetição.
Muitos desses comandos também podem ser usados no Executar, mas são melhores visualizados no CMD. No entanto, esses são mais específicos pro Executar (apesar de funcionarem no CMD também):
cleanmgr
- Abre a limpeza de disco.msconfig
- Abre a janela de itens de inicialização do sistema.winver
- Mostra a versão do Windows.regedit
- Abre o registro do Windows.mrt
- Abre a ferramenta de Remoção de Software Mal-intencionado.msinfo32
- Abre a janela de informações de hardware do sistema, onde exibe os componentes e até mesmo os conflitos.control
- Abre a central de controle (podendo ser combinada para abrir determinados controles, como control mouse
e control fonts
).cmd
- Abre o prompt de comando.powershell
- Abre o Powershell.calc
- Abre a calculadora.notepad
- Abre o bloco de notas.mspaint
- Abre o Paint.wmplayer
- Abre o Windows Media Player.services.msc
- Abre a janela de serviços do sistema.gpedit.msc
- Abre o Editor de Política de Grupo.devmgmt.msc
- Abre o Gerenciador de Dispositivos.ncpa.cpl
- Abre as conexões de rede.dxdiag
- Abre a Ferramenta de Diagnóstico do DirectX, com informações sobre o hardware.PS: Tome cuidado com as fork bombs, que chamam vários processos iguais até travar o sistema. No CMD do Windows, uma fork bomb pode ser assim (quase sempre num arquivo BAT):
:: Não execute nada desse código:
:B
start %0
goto B
Só pra entender, é um comando que chama o próprio arquivo de lotes várias vezes em uma espécie de loop (%0
é referência ao próprio arquivo de lote).
Para criar arquivos BAT, crie um arquivo de texto no Bloco de Notas e salve com a extensão .bat, no formato ANSI, (ou use o copy con
do CMD, o edit
do DOS ou echo
com arquivo no CMD), para criar um arquivo de scripts novo, e coloque os comandos dessa forma:
@echo off
chcp 1252
cls
title Introdução ao BAT em Windows
echo Criação do BAT em Windows Efetuada com Êxito.
echo.
pause
No código acima, o @echo off
tira a exibição dos caminhos do programa, o arroba faz isso em todos os comandos que ele estiver do lado, no entando, usando o echo off dessa forma, ele automaticamente oculta a exibição de todos. O chcp 1252 é pra corrigir acentos (principalmente nos casos que escrevermos arquivos pelo CMD), e o echo com o ponto pula uma linha.
Dessa forma, podemos criar arquivos que executem várias funções de uma vez. Todos os comandos do CMD funcionam normalmente no BAT, mas alguns caracteres podem não funcionar. Podemos inclusive, usar variáveis e operadores condicionais e de repetição.
Para utilizar variáveis no CMD, usamos o comando set nome=
, usada para declarar variáveis (tem que estar com o = tudo junto, tipo set num=3
). As variáveis são usadas com a porcentagem entre eles (tipo %num%
). Podemos também atribuir um caminho de pasta à elas, programas ou sites à elas. Veja um exemplo em BAT:
@echo off
set pasta=C:\Users\%username%\Pictures
start explorer.exe %pasta%
exit
PS: Variáveis em CMD não diferenciam maiúsculas de minúsculas.
Se quiser pedir dados do usuário em variáveis, use o parâmetro /p
para ele ser inserido na variável. O parâmetro /a
é usado para operações matemáticas, cujo resultado será jogado na variável. Veja um exemplo:
@echo off
set /p nome=Digite seu nome:
set /p idade=Digite sua idade:
set /a ano=2017 - idade
echo Olá %nome%, você nasceu em %ano%.
exit
PS: Você pode usar %username%
como um coringa que mostrará o nome do usuário logado no momento. O parâmetro /i
, é usado para não diferenciar maiúsculas de minúsculas.
Essas são as variáveis do sistema (usadas também entre dois %):
Variável | Conteúdo Exibido |
---|---|
USERPROFILE | C:\Users\UsuarioAtual |
PROGRAMDATA | C:\Programdata |
ALLUSERSPROFILE | C:\Programdata |
WINDIR | C:\Windows |
SYSTEMROOT | C:\Windows |
PROGRAMFILES | C:\Program Files |
COMMONPROGRAMFILES | C:\Program Files\Common Files |
USERNAME | "UsuarioAtual" |
COMPUTERNAME | Nome do Computador |
LOCALAPPDATA | C:\Users\Usuário Atual\AppData\Local |
APPDATA | C:\Users\Usuário Atual\AppData\Roaming |
ERRORLEVEL | Código de Erro do Último Comando (quando é diferente de 0). |
CD | Pasta Atual |
USERDOMAIN | Nome do Computador |
SYSTEMDRIVE | C: |
HOMEDRIVE | C: |
SYSTEMDIRECTORY | C:\Windows\System32 |
COMSPEC | C:\Windows\System32\cmd.exe |
TEMP | C:\Users\Usuário Atual\AppData\Local\Temp |
TMP | C:\Users\Usuário Atual\AppData\Local\Temp |
HOMEPATH | \Users\Usuário Atual |
PATH | Retorna o path do sistema |
PATHEXT | Retorna as extensões de executáveis |
OS | Retorna o nome do Sistema Operacional |
PROCESSOR_IDENTIFIER | Retorna dados sobre o processador |
PROCESSOR_ARCHITECTURE | Retorna a arquitetura do processador |
PS: Em sistemas 64 bits, a variável PROGRAMFILES
é referente a pasta de aplicações 64 bits, para acessar a pasta de aplicações 32 bits, use PROGRAMFILES(x86)
. O mesmo vale para a COMMONPROGRAMFILES
, que em aplicativos de 32 bits é COMMONPROGRAMFILES(x86)
.
Como visto no exemplo anterior, é possível fazer operações aritméticas no BAT, normalmente com +, -, * e /, mas lembrando que o % não funciona como cálculo de módulo, devemos utilizar dois %% para isso. Ao fazer contas diretamente pelo CMD usamos apenas um %.
Veja um exemplo de uso para operações aritméticas:
set /p num1=Digite o primeiro número:
set /p num2=Digite o segundo número:
cls
set /a soma=num1 + num2
set /a subs=num1 - num2
set /a mult=num1 * num2
set /a divi=num1 / num2
set /a rest=num1 %% num2
echo A soma entre %num1% e %num2% é igual à %soma%.
echo A subtração entre %num1% e %num2% é igual à %subs%.
echo A multiplicação entre %num1% e %num2% é igual à %mult%.
echo A divisão entre %num1% e %num2% é igual à %divi% com resto de %rest%.
echo.
pause
Também podemos fazer operações aritméticas sem variáveis, apenas digitando set /a seguida da operação, como set /a 10 + 5
, ele retornará o resultado da conta.
Podemos também usar condicionais no BAT, usando o if
, o else
e o else if
. Dessa forma:
@echo off
set /p num=Digite um Número:
if %num% lss 10 (
echo É menor que 10.
) else if %num% gtr 10 (
echo É maior que 10.
) else (
echo É igual à 10.
)
pause
PS: Assegure-se que o fecha parênteses esteja na mesma linha do else ou else if, pra não dar erro.
Veja outro exemplo de BAT para criar pastas:
@echo off
cd C:\Users\%username%\Desktop
if exist teste (
echo Essa Pasta já Existe.
) else (
mkdir teste & echo A Pasta foi Criada.
)
pause
PS: O &
é para executarmos mais de um comando na mesma linha.
Veja algumas opções que podemos usar com números, só lembrando que equ e neq é necessário usar com letras e palavras também:
equ | Igual |
neq | Diferente |
lss | Menor que |
leq | Menor que ou igual |
gtr | Maior que |
geq | Maior que ou igual |
Veja um exemplo para calcular médias:
set /p n1=Digite a primeira nota:
set /p n2=Digite a segunda nota:
:: Não esqueça da ordem de precedência:
set /a med=(n1 + n2) / 2
if %med% lss 4 (
set sit=Reprovado
) else if %med% gtr 6 (
set sit=Aprovado
) else (
set sit=Em Recuperação
)
cls
echo A média das notas é %med%. %sit%!
Para criar uma estrutura de repetição em BAT, usamos o for
, dessa forma:
@echo off
set cao=Volta o cão arrependido, com suas orelhas tão fartas, com seu osso roído, e com o rabo entre as patas...
for /l %%r in (1 1 44) do (
echo %cao%
)
pause
O /l
fará as incrementações. A letra com dois % na frente (%%r
)é um parâmetro que pode ser qualquer letra. O in
passará os números de incremento, com eles entre parênteses, representando na ordem, o início, incremento e fim do mesmo (no caso de usar decremento, apenas coloque o início maior que o fim, e colocar sinal de - no decremento, como (10 -1 0)
). O do
especifica os comandos a serem executados.
Para fazer o incremento também aparecer no echo, fazemos dessa forma:
@echo off
set cao=Volta o cão arrependido, com suas orelhas tão fartas, com seu osso roído, e com o rabo entre as patas...
for /l %%r in (1 1 44) do (
echo %%r - %cao%
)
pause
Veja outro exemplo com um programa que exibe a tabuada de um número:
@echo off
setlocal EnableDelayedExpansion
:inicio
set /p num=Digite um número para ver sua tabuada:
echo.
echo Tabuada de %num%:
echo.
echo ---------------
set cont=1
for /l %%t in (1 1 10) do (
set /a res=%num% * !cont!
echo %num% x !cont! = !res!
set /a cont+=1
)
echo ---------------
echo.
set /p opc=Deseja digitar outros números? [S/N]
if /i %opc%==S (
cls
goto inicio
) else (
exit
)
O Delayed Expansion fazem as variáveis mudarem de nome para valores, então muitas vezes é necessário habilitar elas pra usar com contas.
Para criar um array num BAT podemos fazer assim:
set vetor=1 2 3 4
:: Esse for funciona como um for iterator
for %%v in (%vetor%) do (
echo %%v
)
Ao fazer um array de conteúdos não numéricos, fazemos definindo as posições, assim:
setlocal EnableDelayedExpansion
set vogais[0]=A
set vogais[1]=E
set vogais[2]=I
set vogais[3]=O
set vogais[4]=U
for /l %%n in (0 1 4) do (
echo !vogais[%%n]!
)
Podemos simular funções em BAT, veja um exemplo simples de criação de uma função:
call:mensagem
:mensagem
echo Introdução à Funções em BAT
PS: As funções em BAT deverão sempre ficar no final do script.
Para passarmos parâmetros, não os colocamos dentro dos parênteses, eles são jogados nas variáveis %~1, %~2, %~3, etc. Por exemplo:
call:multi 10 5
:multi n1 n2
:: %~1 e %~2 são os parâmetros
set /a res=%~1 * %~2
echo A multiplicação é %res%
Exemplo com parâmetros:
call:soma 10 5
:soma n1 n2
set /a res=%~1 + %~2
echo %res%
Veja algumas dessas dicas: