Automação de Ambiente .Bat
Voltar para: Games com Phaser + Reactjs
01 // Fundamentos
O que é um arquivo .BAT?
Um arquivo .BAT (Batch File) é um script de texto simples interpretado pelo Command Prompt (cmd.exe) do Windows. Cada linha é tratada como um comando a ser executado em sequência, como se você os digitasse manualmente no terminal.
⚡Automação
Execute dezenas de comandos com um único clique, sem interação manual.
📦Portabilidade
Um arquivo de texto. Funciona em qualquer Windows sem instalar nada extra.
🔁Reprodutibilidade
Configure novos ambientes de desenvolvimento em minutos, sempre da mesma forma.
🎓Aprendizado
Entender o script te faz entender como o sistema operacional funciona por baixo.
Contexto histórico: Scripts Batch existem desde o MS-DOS (1981). Mesmo com o surgimento do PowerShell e WSL, o .BAT continua sendo amplamente utilizado em ambientes corporativos e DevOps por sua simplicidade.
Comandos fundamentais que usaremos
| Comando | Função | Exemplo |
|---|---|---|
| @echo off | Oculta os comandos do output | Primeira linha do script |
| echo | Exibe texto na tela | echo Instalando… |
| if exist | Verifica se arquivo existe | Checar instalação prévia |
| curl | Baixa arquivos da internet | Download dos instaladores |
| start /wait | Executa e aguarda conclusão | Rodar o instalador |
| setx | Define variáveis de ambiente | Configurar PATH |
| pause | Aguarda tecla do usuário | Exibir resultado final |
02 // Metodologia
Por que aprender desta forma?
Este guia aplica princípios de Aprendizagem Baseada em Projetos (PBL) e Aprendizagem Ativa. Em vez de estudar teoria descontextualizada, você constrói algo real e útil enquanto aprende.
🧠Cognitivismo Aplicado
Aprender um conceito novo ancorando-o em algo que você já conhece (o terminal) é mais eficiente. O script .BAT conecta linha de comando → automação → DevOps em uma cadeia lógica compreensível.
🔬Metodologia: Desmembramento Progressivo
O script é apresentado bloco a bloco. Primeiro você entende cada parte, depois vê o todo. Isso evita a sobrecarga cognitiva e facilita a depuração quando algo dá errado.
🎯Ciclo de Kolb (Experiência → Reflexão → Conceito → Aplicação)
- Experiência concreta: Execute o script e veja o ambiente sendo configurado.
- Reflexão: O que aconteceu em cada etapa? Onde foi mais demorado?
- Conceituação: Por que winget é preferível ao download manual?
- Aplicação: Modifique o script para adicionar suas próprias ferramentas.
🏗️Scaffolding (Andaime Pedagógico)
O código completo vem acompanhado de comentários detalhados dentro do próprio script. Cada seção explica o quê faz e por quê — para que você possa remover os comentários conforme ganha confiança.
Dica pedagógica: Não copie e cole o script diretamente. Digite cada linha manualmente na primeira vez. A resistência muscular da digitação reforça a memória e força você a ler cada caractere com atenção.
03 // Requisitos
Pré-requisitos
01 Windows 10 (versão 1809+) ou Windows 11
Necessário para ter o winget (Windows Package Manager) disponível nativamente. Verifique com winget –version no terminal.
02 Conexão com a internet
O script faz download dos instaladores do VS Code e Node.js (~120MB no total). Use uma conexão estável.
03
Permissões de Administrador
A instalação de programas no Windows requer privilégios elevados. O script inclui verificação automática disso.
04 Nenhum VS Code instalado (opcional)
O script verifica se já existe uma instalação. Mas para fins de aprendizado, instale em um ambiente limpo para observar todo o processo.
Atenção ao Antivírus: Alguns antivírus bloqueiam scripts .BAT por padrão. Se o script for bloqueado, adicione uma exceção temporária ou execute pelo terminal com privilégios de administrador.
04 // Ferramentas
As 9 Extensões Essenciais
Entender por que cada extensão está no script é tão importante quanto instalá-la. Abaixo, cada uma com seu ID oficial para o VS Code:
ES7+ React/Redux Snippets – React
Snippets para criar componentes, hooks e estruturas React com atalhos como rfce ou useState.dsznajder.es7-react-js-snippets
ESLint – Lint
Analisa seu código em tempo real e aponta erros de sintaxe, padrões e boas práticas JavaScript.dbaeumer.vscode-eslint
Prettier – Code Formatter – Format
Formata seu código automaticamente ao salvar. Fim de debates sobre espaços vs. tabs.esbenp.prettier-vscode
Live Server – Server
Sobe um servidor local com reload automático. Essencial para ver HTML/CSS/JS em tempo real.ritwickdey.liveserver
Path Intellisense – Path
Autocompleta caminhos de arquivos nos imports — ./comp vira ./components/Button.jsx.christian-kohler.path-intellisense
JavaScript and TypeScript Language Features – JS/TS
IntelliSense nativo para JS e TS — já vem no VS Code, mas esta extensão garante a versão mais recente.vscode.typescript-language-features
Auto Rename Tag – HTML
Renomeia a tag de fechamento automaticamente ao editar a de abertura em HTML/JSX.formulahendry.auto-rename-tag
Bracket Pair Colorizer 2 – Color
Colore pares de chaves/colchetes/parênteses com cores diferentes para facilitar a leitura aninhada.CoenraadS.bracket-pair-colorizer
GitLens – Git
Sobrecarrega o Git nativo do VS Code com histórico, blame inline, comparações e muito mais.eamodio.gitlens
05 // Estrutura
Anatomia do Script
O script está organizado em 5 blocos funcionais. Compreender cada bloco permite reutilizá-lo em outros scripts futuros:
01 Cabeçalho e Configuração
@echo off e title configuram a aparência. setlocal isola variáveis para não poluir o sistema. A verificação de admin garante que as instalações não falharão por falta de permissão.
02 Download e Instalação do VS Code
Usa winget (gerenciador de pacotes nativo do Windows) para baixar e instalar o VS Code de forma silenciosa, sem janelas pop-up ou cliques manuais.
03 Instalação das Extensões
Usa code –install-extension para instalar cada extensão pelo ID. Este é o método oficial recomendado pela Microsoft.
04 Download e Instalação do Node.js
Usa winget novamente para instalar o Node.js LTS (versão de suporte de longo prazo), que inclui automaticamente o npm.
05 Verificação e Mensagem Final
Executa node –version e npm –version para confirmar que tudo foi instalado corretamente antes de encerrar.
06 // Código
O Script Completo
Crie um arquivo chamado setup-dev.bat com o conteúdo abaixo. Cada linha está comentada para facilitar o aprendizado.
Como criar o arquivo: Abra o Bloco de Notas, cole o conteúdo abaixo, vá em Arquivo → Salvar Como, mude o tipo para Todos os Arquivos e salve como setup-dev.bat
@echo off
title Setup Ambiente de Desenvolvimento Windows 11
setlocal EnableExtensions EnableDelayedExpansion
cls
:: =========================================================
:: CONFIGURACOES INICIAIS
:: =========================================================
set "LOGFILE=%~dp0setup-dev-log.txt"
echo =============================================================== > "%LOGFILE%"
echo SETUP DO AMBIENTE DE DESENVOLVIMENTO - %date% %time% >> "%LOGFILE%"
echo =============================================================== >> "%LOGFILE%"
echo ===============================================================
echo SETUP DO AMBIENTE DE DESENVOLVIMENTO WINDOWS 11
echo ===============================================================
echo.
:: =========================================================
:: VERIFICAR ADMIN
:: =========================================================
net session >nul 2>&1
if not "%errorlevel%"=="0" (
echo [ERRO] Execute este script como Administrador!
echo [ERRO] Execute este script como Administrador! >> "%LOGFILE%"
pause
exit /b 1
)
:: =========================================================
:: VERIFICAR WINGET
:: =========================================================
where winget >nul 2>&1
if not "%errorlevel%"=="0" (
echo [ERRO] winget nao encontrado neste sistema.
echo [ERRO] winget nao encontrado neste sistema. >> "%LOGFILE%"
echo Atualize o App Installer pela Microsoft Store.
pause
exit /b 1
)
echo [OK] winget localizado.
echo [OK] winget localizado. >> "%LOGFILE%"
:: =========================================================
:: HABILITAR POWERSHELL PARA SCRIPTS
:: =========================================================
echo.
echo [1/6] Configurando PowerShell para aceitar scripts...
echo [1/6] Configurando PowerShell para aceitar scripts... >> "%LOGFILE%"
powershell -NoProfile -ExecutionPolicy Bypass -Command "try { Set-ExecutionPolicy RemoteSigned -Scope LocalMachine -Force; Write-Output 'ExecutionPolicy LocalMachine ajustada para RemoteSigned.' } catch { Write-Output $_.Exception.Message; exit 1 }" >> "%LOGFILE%" 2>&1
if "%errorlevel%"=="0" (
echo [OK] PowerShell configurado para aceitar scripts locais e assinados.
) else (
echo [AVISO] Nao foi possivel ajustar LocalMachine. Tentando CurrentUser...
echo [AVISO] Nao foi possivel ajustar LocalMachine. Tentando CurrentUser... >> "%LOGFILE%"
powershell -NoProfile -ExecutionPolicy Bypass -Command "try { Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force; Write-Output 'ExecutionPolicy CurrentUser ajustada para RemoteSigned.' } catch { Write-Output $_.Exception.Message; exit 1 }" >> "%LOGFILE%" 2>&1
if "%errorlevel%"=="0" (
echo [OK] PowerShell configurado no escopo do usuario.
) else (
echo [AVISO] Falha ao configurar ExecutionPolicy. Verifique manualmente.
echo [AVISO] Falha ao configurar ExecutionPolicy. >> "%LOGFILE%"
)
)
:: =========================================================
:: HABILITAR DEVELOPER MODE DO WINDOWS
:: =========================================================
echo.
echo [2/6] Habilitando modo de desenvolvimento do Windows...
echo [2/6] Habilitando modo de desenvolvimento do Windows... >> "%LOGFILE%"
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d 1 >> "%LOGFILE%" 2>&1
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowAllTrustedApps" /d 1 >> "%LOGFILE%" 2>&1
if "%errorlevel%"=="0" (
echo [OK] Modo de desenvolvimento habilitado.
echo [OK] Modo de desenvolvimento habilitado. >> "%LOGFILE%"
) else (
echo [AVISO] Nao foi possivel habilitar o modo de desenvolvimento automaticamente.
echo [AVISO] Nao foi possivel habilitar o modo de desenvolvimento automaticamente. >> "%LOGFILE%"
)
:: =========================================================
:: LOCALIZAR VS CODE
:: =========================================================
set "CODE_CMD="
call :FindCodeCmd
:: =========================================================
:: INSTALAR OU ATUALIZAR VS CODE
:: =========================================================
echo.
echo [3/6] Verificando Visual Studio Code...
echo [3/6] Verificando Visual Studio Code... >> "%LOGFILE%"
if defined CODE_CMD (
echo [INFO] VS Code encontrado em: %CODE_CMD%
echo [INFO] VS Code encontrado em: %CODE_CMD% >> "%LOGFILE%"
echo [INFO] Tentando atualizar VS Code...
echo [INFO] Tentando atualizar VS Code... >> "%LOGFILE%"
winget upgrade --id Microsoft.VisualStudioCode -e --accept-package-agreements --accept-source-agreements --silent >> "%LOGFILE%" 2>&1
if "%errorlevel%"=="0" (
echo [OK] VS Code atualizado ou ja estava na versao mais recente.
echo [OK] VS Code atualizado ou ja estava na versao mais recente. >> "%LOGFILE%"
) else (
echo [AVISO] Nao foi possivel atualizar o VS Code agora. Seguindo...
echo [AVISO] Nao foi possivel atualizar o VS Code agora. Seguindo... >> "%LOGFILE%"
)
) else (
echo [INFO] VS Code nao encontrado. Instalando...
echo [INFO] VS Code nao encontrado. Instalando... >> "%LOGFILE%"
winget install --id Microsoft.VisualStudioCode -e --accept-package-agreements --accept-source-agreements --silent >> "%LOGFILE%" 2>&1
if "%errorlevel%"=="0" (
echo [OK] VS Code instalado com sucesso.
echo [OK] VS Code instalado com sucesso. >> "%LOGFILE%"
) else (
echo [AVISO] Falha ao instalar VS Code pelo winget. O script seguira para as proximas etapas.
echo [AVISO] Falha ao instalar VS Code pelo winget. O script seguira para as proximas etapas. >> "%LOGFILE%"
)
)
:: tenta localizar novamente depois de instalar/atualizar
call :FindCodeCmd
if defined CODE_CMD (
echo [OK] Comando do VS Code localizado: %CODE_CMD%
echo [OK] Comando do VS Code localizado: %CODE_CMD% >> "%LOGFILE%"
) else (
echo [AVISO] VS Code nao foi localizado para instalar extensoes.
echo [AVISO] VS Code nao foi localizado para instalar extensoes. >> "%LOGFILE%"
)
:: =========================================================
:: INSTALAR / ATUALIZAR EXTENSOES DO VS CODE
:: =========================================================
echo.
echo [4/6] Verificando extensoes do VS Code...
echo [4/6] Verificando extensoes do VS Code... >> "%LOGFILE%"
if defined CODE_CMD (
set EXTENSIONS[1]=dsznajder.es7-react-js-snippets
set EXTENSIONS[2]=dbaeumer.vscode-eslint
set EXTENSIONS[3]=esbenp.prettier-vscode
set EXTENSIONS[4]=ritwickdey.LiveServer
set EXTENSIONS[5]=christian-kohler.path-intellisense
set EXTENSIONS[6]=formulahendry.auto-rename-tag
set EXTENSIONS[7]=eamodio.gitlens
for /L %%i in (1,1,7) do (
set "EXT=!EXTENSIONS[%%i]!"
echo ---------------------------------------------------------------
echo [INFO] Processando extensao !EXT! ...
echo [INFO] Processando extensao !EXT! ... >> "%LOGFILE%"
call "%CODE_CMD%" --list-extensions | findstr /I /X "!EXT!" >nul
if "!errorlevel!"=="0" (
echo [INFO] Extensao !EXT! ja instalada. Atualizando...
echo [INFO] Extensao !EXT! ja instalada. Atualizando... >> "%LOGFILE%"
call "%CODE_CMD%" --install-extension !EXT! --force >> "%LOGFILE%" 2>&1
if "!errorlevel!"=="0" (
echo [OK] Extensao !EXT! verificada/atualizada.
echo [OK] Extensao !EXT! verificada/atualizada. >> "%LOGFILE%"
) else (
echo [AVISO] Nao foi possivel atualizar !EXT!. Seguindo...
echo [AVISO] Nao foi possivel atualizar !EXT!. Seguindo... >> "%LOGFILE%"
)
) else (
echo [INFO] Extensao !EXT! nao instalada. Instalando...
echo [INFO] Extensao !EXT! nao instalada. Instalando... >> "%LOGFILE%"
call "%CODE_CMD%" --install-extension !EXT! >> "%LOGFILE%" 2>&1
if "!errorlevel!"=="0" (
echo [OK] Extensao !EXT! instalada com sucesso.
echo [OK] Extensao !EXT! instalada com sucesso. >> "%LOGFILE%"
) else (
echo [AVISO] Falha ao instalar !EXT!. Seguindo para a proxima...
echo [AVISO] Falha ao instalar !EXT!. Seguindo para a proxima... >> "%LOGFILE%"
)
)
)
echo.
echo [INFO] Extensoes finais encontradas:
call "%CODE_CMD%" --list-extensions
) else (
echo [AVISO] Etapa de extensoes ignorada porque o VS Code nao foi localizado.
echo [AVISO] Etapa de extensoes ignorada porque o VS Code nao foi localizado. >> "%LOGFILE%"
)
:: =========================================================
:: INSTALAR OU ATUALIZAR NODE.JS LTS
:: =========================================================
echo.
echo [5/6] Verificando Node.js LTS...
echo [5/6] Verificando Node.js LTS... >> "%LOGFILE%"
where node >nul 2>&1
if "%errorlevel%"=="0" (
echo [INFO] Node.js encontrado. Tentando atualizar...
echo [INFO] Node.js encontrado. Tentando atualizar... >> "%LOGFILE%"
winget upgrade --id OpenJS.NodeJS.LTS -e --accept-package-agreements --accept-source-agreements --silent >> "%LOGFILE%" 2>&1
if "%errorlevel%"=="0" (
echo [OK] Node.js atualizado ou ja estava na versao mais recente.
echo [OK] Node.js atualizado ou ja estava na versao mais recente. >> "%LOGFILE%"
) else (
echo [AVISO] Nao foi possivel atualizar Node.js agora. Seguindo...
echo [AVISO] Nao foi possivel atualizar Node.js agora. Seguindo... >> "%LOGFILE%"
)
) else (
echo [INFO] Node.js nao encontrado. Instalando...
echo [INFO] Node.js nao encontrado. Instalando... >> "%LOGFILE%"
winget install --id OpenJS.NodeJS.LTS -e --accept-package-agreements --accept-source-agreements --silent >> "%LOGFILE%" 2>&1
if "%errorlevel%"=="0" (
echo [OK] Node.js instalado com sucesso.
echo [OK] Node.js instalado com sucesso. >> "%LOGFILE%"
) else (
echo [AVISO] Falha ao instalar Node.js.
echo [AVISO] Falha ao instalar Node.js. >> "%LOGFILE%"
)
)
:: atualiza PATH para a sessao atual
if exist "%ProgramFiles%\nodejs\node.exe" set "PATH=%ProgramFiles%\nodejs;%PATH%"
if exist "%ProgramFiles(x86)%\nodejs\node.exe" set "PATH=%ProgramFiles(x86)%\nodejs;%PATH%"
:: =========================================================
:: EXIBIR VERSOES E STATUS
:: =========================================================
echo.
echo [6/6] Verificando versoes instaladas...
echo [6/6] Verificando versoes instaladas... >> "%LOGFILE%"
echo.
if defined CODE_CMD (
echo Versao do VS Code:
call "%CODE_CMD%" --version
echo.
)
where node >nul 2>&1
if "%errorlevel%"=="0" (
echo Versao do Node.js:
node --version
echo.
echo Versao do npm:
npm --version
echo.
) else (
echo [AVISO] Node.js nao esta acessivel no PATH atual.
echo [AVISO] Node.js nao esta acessivel no PATH atual. >> "%LOGFILE%"
)
echo ===============================================================
echo PROCESSO FINALIZADO
echo ===============================================================
echo.
echo Log salvo em:
echo %LOGFILE%
echo.
echo Se alguma maquina ainda nao refletir as alteracoes no PATH,
echo reinicie o terminal ou a propria maquina.
echo.
pause
endlocal
exit /b 0
:: =========================================================
:: FUNCAO PARA LOCALIZAR O code.cmd / Code.exe
:: =========================================================
:FindCodeCmd
set "CODE_CMD="
if exist "%LOCALAPPDATA%\Programs\Microsoft VS Code\bin\code.cmd" (
set "CODE_CMD=%LOCALAPPDATA%\Programs\Microsoft VS Code\bin\code.cmd"
goto :eof
)
if exist "%ProgramFiles%\Microsoft VS Code\bin\code.cmd" (
set "CODE_CMD=%ProgramFiles%\Microsoft VS Code\bin\code.cmd"
goto :eof
)
if exist "%ProgramFiles(x86)%\Microsoft VS Code\bin\code.cmd" (
set "CODE_CMD=%ProgramFiles(x86)%\Microsoft VS Code\bin\code.cmd"
goto :eof
)
for /f "delims=" %%A in ('where code 2^>nul') do (
set "CODE_CMD=%%A"
goto :eof
)
goto :eof
07 // Execução
Como Executar
01 Salve o arquivo como setup-dev.bat
Use o Bloco de Notas ou qualquer editor de texto. Atenção: se você já tem o VS Code instalado, pode usá-lo! Salve com extensão .bat, não .txt.
02 Clique com o botão direito → “Executar como administrador”
Nunca dê duplo clique diretamente. Execute sempre como administrador para garantir permissões de instalação.
03 Aguarde a execução
O script levará de 5 a 15 minutos dependendo da velocidade da internet. Não feche a janela durante a execução.
04 Reinicie o computador
Após a conclusão, reinicie para garantir que o PATH do sistema seja atualizado corretamente e todos os comandos sejam reconhecidos em qualquer terminal.
O que você verá no terminal durante a execução
c:\>setup-dev.bat
===============================================================
SETUP DO AMBIENTE DE DESENVOLVIMENTO WEB + NODE.JS
===============================================================
[OK] Permissoes de administrador confirmadas.
[OK] winget disponivel.
[1/3] Instalando Visual Studio Code...
Aguarde — isso pode levar alguns minutos.
[OK] VS Code instalado com sucesso!
[2/3] Instalando extensoes do VS Code...
Instalando: ES7+ React/Redux Snippets... OK
Instalando: ESLint... OK
...
[3/3] Instalando Node.js LTS...
[OK] Node.js LTS instalado com sucesso!
Versao do Node.js: v22.14.0
Versao do npm: 10.9.2
===============================================================
AMBIENTE CONFIGURADO COM SUCESSO!
===============================================================
c:\> Pressione qualquer tecla para continuar . . .
08 // Validação
Verificando a Instalação
Após reiniciar, abra um novo terminal (cmd ou PowerShell) e execute os seguintes comandos para confirmar:
:: Verifica a versão do Node.js (esperado: v20.x.x ou v22.x.x)
node --version
:: Verifica a versão do npm
npm --version
:: Lista todas as extensões instaladas no VS Code
code --list-extensions
:: Verifica a versão do VS Code
code --version
:: Teste rápido: cria e executa um arquivo Node.js
echo console.log("Node.js funcionando!") > teste.js
node teste.js
:: Saída esperada: Node.js funcionando!
Primeiro projeto: Com tudo instalado, crie uma pasta meu-primeiro-projeto, abra com code . no terminal, crie um index.html e pressione Go Live na barra inferior do VS Code para ver o Live Server em ação!
09 // Prática
Desafios para Praticar
O verdadeiro aprendizado vem da modificação. Aqui estão desafios progressivos para aprofundar seu entendimento:
🟢 Nível 1 — Fácil
Adicione uma extensão de tema (ex: dracula-theme.theme-dracula) ao script. Encontre o ID na página da extensão no VS Code Marketplace.
🟡 Nível 2 — Médio
Adicione a instalação do Git via winget (Git.Git) antes da instalação do VS Code, com verificação se já está instalado.
🔴 Nível 3 — Difícil
Crie uma versão que lê uma lista de extensões de um arquivo extensions.txt externo e as instala em loop com o comando FOR /F.
🟣 Nível 4 — Expert
Transforme o script em um menu interativo com opções: (1) Instalar tudo, (2) Só VS Code, (3) Só Node.js, usando set /p e GOTO.
Reflexão Final: Scripts de automação são a base do DevOps e do conceito de Infrastructure as Code (IaC). Dominar .BAT hoje é o primeiro passo para entender ferramentas como Ansible, Terraform, e GitHub Actions amanhã.
