How can a .bat file be 'converted' to .exe without third party tools?
有很多原因需要将
还有很多原因不想使用第三方工具。
那么,如果您想在不使用外部软件的情况下将批处理文件"转换"为
一个非常明显的方法是使用IExpress,这是一种古老的内置工具,可以创建自解压包并能够执行后解压命令。这里是iexpress-sed指令/.bat文件,它用packed.bat创建了一个自解压的.exe文件。它接受两个参数-要转换的.bat文件和目标可执行文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | ;@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=<None> AdminQuietInstCmd= UserQuietInstCmd= |
例子:
1 | bat2exeIEXP.bat myBatFile.bat MyExecutable.exe |
实际上,这应该在所有Windows计算机上都有效,但有一个主要限制——不能将参数传递给已创建的.exe文件。
因此,另一种可能的方法是查看.NET编译器(在几乎每台Win机器上都应该可以使用它),我选择了jscript.net。这是一个混合的
它相当于一个POC,但是.NET System.Diagnostics和System.IO库足够强大,可以添加隐藏的启动、加密等功能。您还可以检查jsc.exe编译选项,以了解其他功能(如添加资源)。
我保证对.NET方法的每一个改进都会投赞成票:—)
更新:第二个脚本已更改,现在可以通过双击启动转换的BAT文件中的exe。它使用与前一个脚本相同的界面:
1 | bat2exejs.bat example.bat example.exe |
您还可以开发一个简单的exe,它只调用BAT脚本。
例如,你可以用c(我不是c-pro,这实际上是我的第一个程序,我从另一个stackoverflow帖子中复制了很多程序。):
4如果将上述代码存储到mysuperapp.cs中mysuperapp.bat旁边,然后用
启动
(应该吗?)在每台Windows计算机上都存在。
我知道如何手动将bat/cmd转换为exe,确保bat/cmd文件名只包含字母和数字。以管理员身份打开"IExpress向导"。