Saltar al contenido

¿Cómo se puede ‘convertir’ un archivo .bat a .exe sin herramientas de terceros?

Si te encuentras con algo que no entiendes puedes comentarlo y haremos todo lo necesario de ayudarte tan rápido como podamos.

Solución:

Un enfoque muy obvio es usar IEXPRESS, la antigua herramienta incorporada que crea paquetes autoextraíbles y es capaz de ejecutar comandos posteriores a la extracción. Así que aquí está el archivo IEXPRESS sed-directive / .bat que crea un .exe autoextraíble con .bat empaquetado. Acepta dos argumentos: el archivo .bat que desea convertir y el ejecutable de destino:

 ;@echo off
; rem https://github.com/npocmaka/batch.scripts/edit/master/hybrids/iexpress/bat2exeIEXP.bat
;if "%~2" equ "" (
; echo usage: %~nx0 batFile.bat target.Exe
;)
;set "target.exe=%__cd__%%~2"
;set "batch_file=%~f1"
;set "bat_name=%~nx1"
;set "bat_dir=%~dp1"

;copy /y "%~f0" "%temp%2exe.sed" >nul

;(echo()>>"%temp%2exe.sed"
;(echo(AppLaunched=cmd.exe /c "%bat_name%")>>"%temp%2exe.sed"
;(echo(TargetName=%target.exe%)>>"%temp%2exe.sed"
;(echo(FILE0="%bat_name%")>>"%temp%2exe.sed"
;(echo([SourceFiles])>>"%temp%2exe.sed"
;(echo(SourceFiles0=%bat_dir%)>>"%temp%2exe.sed"
;(echo([SourceFiles0])>>"%temp%2exe.sed"
;(echo(%%FILE0%%=)>>"%temp%2exe.sed"


;iexpress /n /q /m %temp%2exe.sed

;del /q /f "%temp%2exe.sed"
;exit /b 0

[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=0
HideExtractAnimation=1
UseLongFileName=1
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles

[Strings]
InstallPrompt=
DisplayLicense=
FinishMessage=
FriendlyName=-
PostInstallCmd=
AdminQuietInstCmd=
UserQuietInstCmd=

ejemplo:

bat2exeIEXP.bat  myBatFile.bat MyExecutable.exe

Esto debería funcionar prácticamente en todas las máquinas con Windows, pero tiene una limitación importante: no puede pasar argumentos al archivo .exe creado.

Entonces, otro enfoque posible es mirar los compiladores .NET (nuevamente, debería estar disponible en casi todas las máquinas ganadoras). Jscript.net . Este es un híbrido jscript.net/.bat script que leerá el contenido del archivo .batch. Creará otro jscript.net con el contenido del archivo .bat y después de la compilación creará un nuevo archivo bat en la carpeta temporal y lo llamará. Y aceptará argumentos de línea de comando. (explicado puede parecer complejo, pero de hecho es simple):

@if (@X)==(@Y) @end /* JScript comment
@echo off
setlocal

del %~n0.exe /q /s >nul 2>nul

for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%Microsoft.NETFramework*jsc.exe"') do (
   set "jsc=%%v"
)

if not exist "%~n0.exe" (
    "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
)

%~n0.exe  "%jsc%" %*
del /q /f %~n0.exe 1>nul 2>nul 
endlocal & exit /b %errorlevel%
*/

//https://github.com/npocmaka/batch.scripts/blob/master/hybrids/.net/bat2exe.bat
import System;
import System;
import System.IO;
import  System.Diagnostics;


var arguments:String[] = Environment.GetCommandLineArgs();
if (arguments.length<3)
    Console.WriteLine("Path to cmdbat file not given");
    Environment.Exit(1);


var binName=Path.GetFileName(arguments[2])+".exe";
if(arguments.length>3)
    binName=Path.GetFileName(arguments[3]);

var batchContent:byte[]= File.ReadAllBytes(arguments[2]);
var compilerLoc=arguments[1];

var content="["

for (var i=0;i

Es más bien un POC, pero las bibliotecas .NET System.Diagnostics y System.IO son lo suficientemente potentes como para agregar funciones como inicio oculto, enctiption, etc. ).

Prometo un voto positivo a cada mejora sobre el método .NET 🙂

ACTUALIZAR: el segundo script se ha cambiado y ahora el archivo ejecutable del archivo bat convertido se puede iniciar con un doble clic. Utiliza la misma interfaz que el script anterior:

bat2exejs.bat example.bat example.exe

Sé cómo convertir bat / cmd a exe manualmente, asegúrese de que el nombre de archivo bat / cmd contenga solo letras y números. Abra 'IExpress Wizard' como administrador.

  1. Seleccione 'Crear nuevo archivo de directiva de autoextracción'
  2. Seleccione 'Extraer archivos y ejecutar un comando de instalación'
  3. Nombra el paquete como quieras
  4. 'Sin mensaje' para 'Mensaje de confirmación'
  5. 'No mostrar una licencia' para 'Acuerdo de licencia'
  6. Haga clic en 'Agregar' para los 'Archivos empaquetados', desde allí seleccione el archivo bat / cmd
  7. Luego, en el cuadro de texto 'Instalar programa' para 'Instalar programa para iniciar', escriba cmd /c, seguido del nombre completo del archivo bat / cmd, (ejemplo: emptyrecyclebin.bat => cmd /c emptyrecyclebin.bat)
  8. Deje el 'Comando posterior a la instalación' como está
  9. 'Oculto' para 'Mostrar ventana'
  10. 'Sin mensaje' para 'Mensaje terminado'
  11. Haga clic en 'Examinar' y seleccione dónde descargar el archivo exe
  12. Habilite 'Ocultar archivo de extracción de animación de progreso del usuario'
  13. Deshabilite 'Almacenar archivos usando un nombre de archivo largo dentro del paquete'
  14. Definitivamente 'Sin reinicio' para 'Configurar reinicio'
  15. Luego, guarde SED si desea volver a compilarlo más rápido más tarde
  16. Luego ¡crea el paquete! Una ventana de comando debe rápidamente aparecer y desaparecer
  17. Navegue hasta el lugar donde descargó el archivo exe, ydisfrutar!

Agradecemos que desees añadir valor a nuestro contenido aportando tu veteranía en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *