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!

Nenhum comentário:

Postar um comentário