No fundo, os arquivos em lote e os arquivos executáveis funcionam praticamente da mesma maneira. Ambos são simplesmente um conjunto de instruções e lógicas para execução do Windows. Então, por que você deseja converter um script em lote em um executável se eles funcionam essencialmente da mesma forma? Aqui estão algumas razões:
- Portabilidade – você pode incluir ferramentas adicionais em seu arquivo EXE das quais o arquivo em lote depende.
- Proteção – um EXE fornece proteção para o seu script de origem para garantir que ele não seja modificado inadvertidamente.
- Conveniência – os arquivos executáveis podem ser fixados no menu Iniciar do Windows e / ou na barra de tarefas do Windows 7.
Com o script abaixo, você pode construir facilmente seu próprio arquivo executável a partir de um arquivo em lote, completo com as ferramentas incorporadas necessárias.
Configuração
Este script que irá converter tira proveito de um SFX avançado 7-Zip (SelF eXtractor) para agrupar e executar o arquivo em lote com quaisquer ferramentas incluídas. Portanto, você precisará fazer o download (links fornecidos no final) e extraí-los em um único diretório.
Depois de fazer o download de tudo, defina a variável ‘PathTo7Zip’ no script para o local onde esses arquivos foram baixados.
O roteiro
@ECHO OFF
ECHO Make EXE From BAT
ECHO Written by: Jason Faulkner
ECHO SysadminGeek.com
ECHO.
ECHO.
REM Usage:
REM MakeExeFromBat BatFileToConvert [IncludeFile1] [IncludeFile2] […]
REM
REM Required Parameters:
REM BatFileToConvert
REM Source batch file to use to produce the output Exe file.
REM
REM Optional Parameters:
REM IncludeFile
REM Additional files to include in the Exe file.
REM You can include external tools used by the batch file so they are available on the executing machine.
SETLOCAL
REM Configuration (no quotes needed):
SET PathTo7Zip=
REM —- Do not modify anything below this line —-
SET OutputFile=”%~n1.exe”
SET SourceFiles=”%TEMP%MakeEXE_files.txt”
SET Config=”%TEMP%MakeEXE_config.txt”
SET Source7ZFile=”%Temp%MakeEXE.7z”
REM Remove existing files
IF EXIST %OutputFile% DEL %OutputFile%
REM Build source archive
ECHO “%~dpnx1” > %SourceFiles%
:AddInclude
IF {%2}=={} GOTO EndInclude
ECHO “%~dpnx2” >> %SourceFiles%
SHIFT /2
GOTO AddInclude
:EndInclude
“%PathTo7Zip%7za.exe” a %Source7ZFile% @%SourceFiles%
REM Build config file
ECHO ;!@Install@!UTF-8! > %Config%
ECHO RunProgram=”%~nx1″ >> %Config%
ECHO ;!@InstallEnd@! >> %Config%
REM Build EXE
COPY /B “%PathTo7Zip%7zsd.sfx” + %Config% + %Source7ZFile% %OutputFile%
REM Clean up
IF EXIST %SourceFiles% DEL %SourceFiles%
IF EXIST %Config% DEL %Config%
IF EXIST %Source7ZFile% DEL %Source7ZFile%
ENDLOCAL
Converter script e considerações finais
É importante observar que, embora o arquivo resultante seja executado exatamente da mesma forma que o arquivo BAT de origem, essa não é uma conversão verdadeira de lote para executável. O arquivo resultante é um EXE, no entanto, ele deve ser usado para instaladores de extração automática. Quando você executa o arquivo EXE resultante, o processo é mais ou menos assim:
- O conteúdo do arquivo EXE é extraído para o diretório temporário.
- O arquivo de configuração gerado pelo script é lido.
- O arquivo em lote contido no arquivo EXE é executado em uma nova janela de comando.
- Depois de concluído, os arquivos temporários são removidos.
No Windows Vista e em novos sistemas operacionais, você poderá ver a seguinte caixa de mensagem após a execução do script. Após selecionar ‘Este programa foi instalado corretamente’, a caixa de mensagem não será exibida no futuro para este arquivo.
Como o arquivo EXE é iniciado em uma nova janela, a maneira típica de registrar a saída (usando o caractere ‘>’) não funcionará conforme o esperado. Para registrar a saída, você precisará lidar com isso nativamente em seu script de origem.
Apesar desses pequenos inconvenientes, ser capaz de converter um arquivo em lote em um executável pode realmente ser útil.