Como apontado nos comentários, o preenchimento de um programa executável dentro de um arquivo de texto irá abortar o arquivo binário. Em vez disso, você pode armazenar uma versão codificada e decodificá-la. Para conseguir isso facilmente, você pode usar o PowerShell. Comece com este arquivo de lote:
@echo off
powershell -command "[IO.File]::WriteAllBytes('extracted.exe', [Convert]::FromBase64String((gc '%0')[-1]))"
extracted
del extracted.exe
exit
REM Base64-encoded program will be inserted below
Adicione uma linha extra em branco no final.
A parte interessante é a invocação do PowerShell. Esse comando lê o conteúdo do arquivo em lote, pega a última linha, decodifica-a a partir de Base64 e grava esses bytes em um arquivo chamado extracted.exe
. Em seguida, o arquivo em lote apenas executa esse EXE e, uma vez feito isso, ele é limpo excluindo-se o executável temporário.
Para fazer com que a última linha tenha as informações necessárias, abra o PowerShell, cd
no diretório com o arquivo em lotes e execute-o (com nomes de arquivos e caminhos reais colocados):
[Convert]::ToBase64String([IO.File]::ReadAllBytes('C:\fullPathTo\file.exe')) | Out-File 'batchFile.bat' -Append -Encoding ASCII
Uma vez feito isso, seu arquivo em lote poderá extrair o programa e executá-lo.