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.
- Seleccione 'Crear nuevo archivo de directiva de autoextracción'
- Seleccione 'Extraer archivos y ejecutar un comando de instalación'
- Nombra el paquete como quieras
- 'Sin mensaje' para 'Mensaje de confirmación'
- 'No mostrar una licencia' para 'Acuerdo de licencia'
- Haga clic en 'Agregar' para los 'Archivos empaquetados', desde allí seleccione el archivo bat / cmd
- 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
) - Deje el 'Comando posterior a la instalación' como está
- 'Oculto' para 'Mostrar ventana'
- 'Sin mensaje' para 'Mensaje terminado'
- Haga clic en 'Examinar' y seleccione dónde descargar el archivo exe
- Habilite 'Ocultar archivo de extracción de animación de progreso del usuario'
- Deshabilite 'Almacenar archivos usando un nombre de archivo largo dentro del paquete'
- Definitivamente 'Sin reinicio' para 'Configurar reinicio'
- Luego, guarde SED si desea volver a compilarlo más rápido más tarde
- Luego ¡crea el paquete! Una ventana de comando debe rápidamente aparecer y desaparecer
- 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.