segunda-feira, 1 de agosto de 2016

[DIY] Arquivo batch com menu


Fala galera que acompanha o blog...

Pode ser que você esteja estranhando a sigla DIY (Do It Yourself) no titulo dessa postagem, mas é exatamente disso que esse post se trata. "Faça você mesmo" um arquivo batch com menu e com várias funcionalidades para agilizar seu dia a dia.


[DIY] Arquivo batch com menu


Se você não conhece o que são arquivos batch, clique nesse link onde explicamos o que são esses arquivos, como criar e executar.

Normalmente, cria-se um arquivo batch para cada tarefa. Mas, e se juntássemos todos esses arquivos e colocássemos em um único arquivo batch, criássemos apenas uma variável de ambiente para nosso arquivo e através de um menu executássemos qualquer uma das nossas tarefas... parece ser bacana não?

É exatamente isso que vamos fazer!

Vocês perceberão que em nem toda linha foi comentada, por ser um pouco repetitivo. Mas a ideia geral é:
  • Temos uma tela de login, caso erre 3 vezes a senha seu computador será desligado;
A SENHA INICIAL É 1234, ABRA O ARQUIVO BATCH E CONFIGURE A SENHA QUE ACHAR MELHOR.
  • Acessando o sistema, temos um menu com várias funcionalidades, que antes estavam cada uma em um arquivo batch e foi reunido tudo nesse arquivo;
  • Alguns comandos, por serem "críticos" precisa de uma confirmação do usuário para que serem executados;
  • Sugiro que execute esse arquivo batch no prompt de comando com permissão de administrador, pois alguns comandos precisam de tal permissão;
rem EXIBE APENAS O COMANDO SEM APRENTAR DIRETORIO
@echo off
cls
rem ALTERO A COR DO BACKGROUND E DA FONTE APENAS PARA IDENTIFICAR QUE ESTOU DENTRO DE UM ARQUIVO BATCH
color 80
rem ALTERO O TITULO DA PAGINA
Title COMANDOS DEVIC - PASSWORD
rem SETO A QUANTIDADE DE TENTATIVAS PARA LOGAR NO ARQUIVO BATCH
set /a tries=3

rem TODO ARQUIVO QUE POSSUIR ":NOME" É UM PONTO DE ACESSO (PA) REFERENCIADO POR UM COMANDO "goto"
:TOP
echo  ================================================= 
echo *        %tries% tentativa(s) restante(s).         *
echo  ================================================= 
echo Entre com sua senha:
rem SETO A SENHA NA MINHA VARIAVEL
set /p pass= 
rem VERIFICO SE A SENHA DIGITADA É A MESMA QUE FOI CONFIGURADA SE SIM ENVIO PARA O PA IDENTIFICADO COM "MENU"
if %pass% == 1234 goto MENU
rem DECREMENTO A QUANTIDADE DE TENTATIVAS
set /a tries = %tries -1
rem VERIFICO SE ACABOU AS TENTAVAS SE SIM ENVIO PARA O PA IDENTIFICADO COMO "ERROR" E CHAMO O PA "TOP" NOVAMENTE
if %tries% == 0 goto ERROR
cls
goto TOP

rem TENDO ESGOTADO AS TENTATIVAS ESSE PA É CHAMADO E INICIO O DESLIGAMENTO PROGRAMADO
:ERROR
echo Desculpe, voce errou muitas vezes a senha e seu computador será desligado.
start shutdown -s -f -t 1800 -c "DESLIGANDO EM 3 MINUTOS..."
pause
exit

rem ESSE É O MENU DO SISTEMA, ALTERO O TITULO DA PAGINA, OS NUMEROS REPRESENTAM CADA SERVIÇO QUE PODERÁ SER EXECUTADO
:MENU
cls
Title COMANDOS DEVIC - MENU
rem MOSTRO AS HORAS, NOME DO COMPUTADOR E USUARIO LOGADO
date /t
echo Computador: %computername%     Usuario: %username%
echo.
echo              MENU DEVELOPER IS COMING
echo  ================================================= 
echo * 1. Desligar                                     *
echo * 2. Programar desligamento (5 min)               *
echo * 3. Cancelar desligamento                        *
echo * 4. Alterar usuario                              *
echo * 5. Reiniciar                                    *
echo * 6. Abrir Prompt Comando                         *
echo * 7. Abrir Prompt Comando (Admin)                 *
echo * 8. Telnet                                       *
echo * 9. Mapa de caracteres                           *
echo * 10. IP Config                                   * 
echo * 11. Esvaziar a Lixeira                          *
echo * 12. Fazer Backup                                *
echo * 13. Escanear Disco Local                        *
echo * 14. Painel de Controle                          *
echo * 15. Calculadora                                 *
echo * 16. Notepad                                     *
echo * 17. Inicializar                                 *
echo * 18. Abrir Workspace                             *
echo * 19. Abrir Servidor                              *
echo * 20. Executar BATCH externo                      *
echo * 21. IP's conectados                             *
echo * 99. Star Wars Episodio IV                       *
echo * 0. Sair                                         *
echo  =================================================

rem SETO O VALOR NA MINHA CARIAVEL
set /p opcao= Escolha uma opcao:
echo  ================================================= 
rem COMANDO 1 AO 5 EU CHAMO O MEU PA "CONFIRMATION" PARA VERIFICAR SE REALMENTE É PARA EXECUTAR O COMANDO
rem POIS SÃO COMANDOS CRITICOS QUE PODEM TER SIDO DIGITADOS ERRONEAMENTE, POSSIBILIDADES DA APLICAÇÃO
if %opcao% equ 0 goto EXIT
if %opcao% equ 1 goto CONFIRMATION
if %opcao% equ 2 goto CONFIRMATION
if %opcao% equ 3 goto CONFIRMATION
if %opcao% equ 4 goto CONFIRMATION
if %opcao% equ 5 goto CONFIRMATION
if %opcao% equ 6 goto OPENCMD
if %opcao% equ 7 goto OPENCMDAMD
if %opcao% equ 8 goto OPENTELNET
if %opcao% equ 9 goto MAPCHAR
if %opcao% equ 10 goto IPCNFG
if %opcao% equ 11 goto TRASH
if %opcao% equ 12 goto BACKUP
if %opcao% equ 13 goto SCANDISK
if %opcao% equ 14 goto PNLCONTROL
if %opcao% equ 15 goto CALC
if %opcao% equ 16 goto NOTE
if %opcao% equ 17 goto INIT
if %opcao% equ 18 goto WORKSPACE
if %opcao% equ 19 goto SERVER
if %opcao% equ 20 goto BATCH
if %opcao% equ 21 goto NET
if %opcao% equ 99 goto STARWARS

rem VERIFICO SE REALMENTE É PARA EXECUTAR OS COMANDOS (NO POST EXPLICO CADA UM DOS PARAMETROS)
:CONFIRMATION
CHOICE /N /T 30 /C sn /CS /D s /M "Deseja executar a operacao? [S]im ou [N]ao"
if errorlevel = 2 goto NAO
if errorlevel = 1 goto SIM

rem SE REALMENTE FOR PARA EXECUTAR O COMANDO EU CHAMO O PA RESPONSAVEL PELA FUNCIONALIDADE
:SIM
cls
echo O usuario pressionou [S]
pause
if %opcao% equ 1 goto TURNOFFINSTA
if %opcao% equ 2 goto TURNOFFTIME
if %opcao% equ 3 goto CANCELTURNOFF
if %opcao% equ 4 goto LOGOFF
if %opcao% equ 5 goto RESTART

rem SE NÃO FOR PARA EXECUTAR O COMANDO RETORNO PARA O MENU
:NAO
cls
echo O usuario pressionou [N]
pause
goto MENU

rem OPCAO 1. Desligar
:TURNOFFINSTA
shutdown -s -t 0
goto EXIT

rem OPCAO 2. Programar desligamento (5 min)
:TURNOFFTIME
shutdown -s -f -t 300 -c "VOCE TEM 5 MINUTOS PARA SALVAR SEUS TRABALHOS..."
goto MENU

rem OPCAO 3. Cancelar desligamento
:CANCELTURNOFF
shutdown -a
goto MENU

rem OPCAO 4. Alterar usuario  
:LOGOFF
shutdown -f
goto MENU

rem OPCAO 5. Reiniciar
:RESTART
shutdown -r -t 0
goto EXIT

rem OPCAO 6. Abrir Prompt Comando
:OPENCMD
cls
"%windir%\system32\cmd.exe"
goto MENU

rem OPCAO 7. Abrir Prompt Comando (Admin)
:OPENCMDAMD
cls
runas /user:Faguinho "%windir%\system32\cmd.exe"
goto MENU

rem OPCAO 8. Telnet
rem NECESSARIO QUE O SERVICO TELNET ESTEJA HABILITADO PREVIAMENTE
:OPENTELNET
cls
telnet

rem OPCAO 9. Mapa de caracteres 
:MAPCHAR
cls
"%windir%\SYSTEM32\CHARMAP.exe"
pause
goto MENU

rem OPCAO 10. IP Config 
:IPCNFG
cls
call ipconfig
pause
goto MENU

rem OPCAO 11. Esvaziar a Lixeira  
:TRASH
cls
rd /S /Q c:\$Recycle.bin
echo  ================================================= 
echo *                  LIXEIRA ESVAZIADA!             *
echo  ================================================= 
pause
goto MENU

rem OPCAO 12. Fazer Backup
rem NECESSÁRIO DEFINIR UMA PASTA DE ORIGEM E UMA PASTA DE DESTINO
:BACKUP
cls
xcopy /T /C C:\Users\Faguinho\Documents\*.* C:\Users\Faguinho\Favorites
echo  ================================================= 
echo *                  BACKUP CONCLUIDO!              *
echo  ================================================= 
pause
goto MENU

rem OPCAO 13. Escanear Disco Local 
rem NECESSÁRIO DEFINIR QUAL UNIDADE DEVERIA SER ESCANEADA
:SCANDISK
cls
echo  ================================================= 
echo *              ESCANEAMENTO DE DISCO!             *
echo  ================================================= 
chkdsk c:
pause
goto MENU

rem OPCAO 14. Painel de Controle 
:PNLCONTROL
cls
control.exe
pause
goto MENU

rem OPCAO 15. Calculadora
:CALC
cls
calc.exe
pause
goto MENU

rem OPCAO 16. Notepad  
:NOTE
cls
notepad.exe
pause
goto MENU

rem OPCAO 17. Inicializar   
rem ADICIONE TODOS AS FERRAMENTAS QUE UTILIZA COM FREQUENCIA
:INIT
rem <ferramenta 1="" a="" dia="" no="" que="" usa="" voce="">
rem <ferramenta 2="" a="" dia="" no="" que="" usa="" voce="">
rem <ferramenta 3="" a="" dia="" no="" que="" usa="" voce="">
goto MENU

rem OPCAO 18. Abrir Workspace
:WORKSPACE
start %userprofile%\Desktop\Projetos\workspace
pause
goto MENU

rem OPCAO 19. Abrir Servidor 
:SERVER
start %userprofile%\Desktop\Ferramentas\oracle
pause
goto MENU

rem OPCAO 20. Executar BATCH externo 
rem NECESSARIO CRIAR ARQUIVO BATCH
:BATCH
call %userprofile%\Desktop\horas.bat
pause
goto MENU

rem OPCAO 21. IP's conectados
:NET
call netstat -an
pause
goto MENU

rem OPCAO 99. Star Wars Episodio IV
:STARWARS
telnet towel.blinkenlights.nl

rem OPCAO 0. Sair 
:EXIT
cls
echo  ================================================= 
echo *                  ATE MAIS!                      *
echo  ================================================= 
pause
exit


Esse é o nosso projeto! Se preferir pode fazer o download dos arquivos aqui.
Vou deixar aqui o batch externo que eu utilizo ao selecionar a opção "20. Executar BATCH externo":
@echo off
Title QUE HORAS SAO?
cls
echo                            AGORA SAO EXATAMENTE:
echo.
echo                                ~ %TIME% ~
echo.

Vamos entender agora o "choice", utilizado para recuperar a opção selecionada pelo usuário:


CHOICE /N /T 30 /C sn /CS /D s /M "Deseja executar a operacao? [S]im ou [N]ao"
/N - Oculta uma lista de opções no prompt. A mensagem antes do prompt é exibida e as opções ainda estão ativadas.
/T - É o número de segundos de pause antes que uma opção padrão seja escolhida, eu coloquei 30 segundos.
/C - Especifica uma listas de opções a ser criada. "sn = Sim ou Não"
/CS - Permite a seleção de opções de distinção entre maiúsculas e minúsculas. Por padrão, o utilitário não diferencia maiúsculas e minúsculas.
/D - Especifica a opção padrão depois de 30 segundos. "/D s"
/M - Especifica a mensagem a ser exibida antes do prompt. Se não for especificado, o utilitário exibe apenas um prompt.

Em caso de duvidas sobre oque o cada comando faz, podem utilizar esse post aqui. Possui uma lista com vários comandos e explicação de sua funcionalidade. 

E para finalizar, precisamos adicionar nosso arquivo batch nas variáveis de ambiente, para que possamos executa-lo de qualquer diretório. Para isso veja esse post, onde ensino como criar uma variavel de ambiente.
Caso ainda não tenham visto, não deixem de selecionar a opção "99. Star Wars Episodio IV". Caso não funcione verifique se o telnet esta habilitado na sua máquina.

Pessoal, é isso ai... Até a próxima!

Esse código já está disponível no github, clique aqui!
Luiz Fagner Zordan Analista de Sistemas

Graduado em Sistemas de Informação, atualmente trabalhando na Embraer pela FocusNetworks como FullStack. Sou apaixonado por tecnologia, fascinado por jogos e adoro passar o tempo assistindo séries.