不需要额外的外部软件,将 .bat 转换为 .exe(创建 SFX)

22

跟随这个 指南 的步骤,我正在尝试将bat转换为exe,而不安装任何新软件,比如 Bat to Exe Converter。 我使用此方法的原因是因为我们工作场所的所有计算机都已安装了7zip,并且可以使用它,但是我不被允许使用未在主服务器上存在的外部软件来使脚本在公司的任何计算机上兼容。

我有以下的 TEST.bat:

ECHO This is a Test bat to exe
pause

以及 config.txt 文件:

;!@Install@!UTF-8! 
RunProgram="TEST.bat" 
;!@InstallEnd@! 

然后我在另一个.bat文件中调用以下命令行:

COPY /B "%PathTo7Zip%\7zCon.sfx" + %Config% + %Source7ZFile% %OutputFile%

%PathTo7Zip%7zCon.sfx 的目录。 %Config% 是上面的 config.txt 文件。 %Source7ZFile% 是我的 .7z 压缩包。 而 %OutputFile% 是我的输出TEST.exe文件,根据指南作者的说法,当我调用它时应该运行bat文件。 然而,调用 TEST.exe 会触发解压缩 .7z 压缩包(这是预期的),然后退出而不运行 TEST.bat

然而,作者解释道:

结论:

需要注意的是,虽然生成的文件与源BAT文件完全相同,但这并不是真正的批处理转可执行文件。生成的文件是一个EXE,但它旨在用于自解压安装程序。当您执行生成的EXE文件时,过程类似于以下步骤:

  1. 将EXE文件的内容提取到临时目录中。
  2. 读取脚本生成的配置文件。
  3. 在新的命令窗口中执行包含在EXE文件中的批处理文件。
  4. 完成后,删除临时文件。


1
问题是什么?也许你想要检查一下这个 - https://dev59.com/zl4c5IYBdhLWcg3wOoAH - npocmaka
@npocmaka,问题是为什么批处理文件没有执行?为什么步骤3缺失?我试图更改批处理文件,因为也许“暂停”不起作用,我无法看到输出。所以我在我的批处理文件中添加了“mkdir not_a_real_dir”,即使这样也没有添加新文件夹。批处理文件根本没有执行,也许有人知道原因。 - Hadi Farah
2
你的问题与你的要求不符!这个想法似乎是使用外部软件,一个7zip自解压模块。 - Compo
1
@npocmaka,我查看了您的链接,似乎有另一种方法可以在没有7zip的情况下完成这个任务,感谢您的帮助。之前我参考了这个页面如何将Windows批处理脚本转换为.exe文件?,但该页面上没有您给出的解决方案。 - Hadi Farah
显示剩余2条评论
2个回答

61
请参考这篇文章:如何在不使用第三方工具的情况下将.bat文件“转换”为.exe文件? 原始脚本接受两个参数——您要转换的.bat文件和目标可执行文件。
我对其进行了一些修改,只接受一个参数:您要转换的.bat文件。
因此,在这种情况下,您可以将批处理文件拖放到此脚本bat2exeIEXP.bat上,它将被转换为与批处理文件同名的exe文件。 enter image description here
;@echo off
;Title Converting batch scripts to file.exe with iexpress
;Mode 75,3 & color 0A
;Rem Original Script https://github.com/npocmaka/batch.scripts/edit/master/hybrids/iexpress/bat2exeIEXP.bat
;echo(
;if "%~1" equ "" (
    ;echo  Usage : Drag and Drop your batch file over this script:"%~nx0"  
    ;Timeout /T 5 /nobreak>nul & Exit
;)
;set "target.exe=%__cd__%%~n1.exe"
;set "batch_file=%~f1"
;set "bat_name=%~nx1"
;set "bat_dir=%~dp1"
;Set "sed=%temp%\2exe.sed"
;echo              Please  wait a while ...  Creating "%~n1.exe" ...
;copy /y "%~f0" "%sed%" >nul
;(
    ;(echo()
    ;(echo(AppLaunched=cmd /c "%bat_name%")
    ;(echo(TargetName=%target.exe%)
    ;(echo(FILE0="%bat_name%")
    ;(echo([SourceFiles])
    ;(echo(SourceFiles0=%bat_dir%)
    ;(echo([SourceFiles0])
    ;(echo(%%FILE0%%=)
;)>>"%sed%"

;iexpress /n /q /m %sed%
;del /q /f "%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=

如何为此输出的 setup.exe 设置自定义图标? - Philip
1
@Philip:快捷方式中的图标可以从“文件属性”对话框中更改。目标可执行文件(.exe 文件)中的图标可以通过二进制文件编辑器(如Resource Hacker或GConvert)进行更改。其他一些工具列在以下网址:https://listoffreeware.com/free-software-change-program-icon/ - Zimba
如何在批处理脚本中处理相对路径? - Serob_b
@IonicMan 更改 ShowInstallProgramWindow=1 - Justas
生成的exe文件是否支持命令行参数?我尝试编译“ECHO you said %1”,在bash脚本中可以工作,但是使用生成的exe文件时会出现语法错误。 - Felix Jassler
显示剩余2条评论

2
所有安装了.NET的Windows机器都带有名为vbc.exe、csc.exe和jsc.exe的文件,位于%windir%\Microsoft.NET\Framework(32位)或Framework64(64位),在以“v”开头的文件夹中。
C#编译器指南:
https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe Visual Basic编译器指南:
https://learn.microsoft.com/zh-cn/dotnet/visual-basic/reference/command-line-compiler/index
示例命令:
https://learn.microsoft.com/zh-cn/dotnet/visual-basic/reference/command-line-compiler/sample-compilation-command-lines 一份 Jscripting 指南:
http://www.phpied.com/make-your-javascript-a-windows-exe/

一个简单的步骤,由 @Itchy 提供,使用 csc.exe 将批处理文件打包成 exe 文件:
How can a .bat file be 'converted' to .exe without third party tools?

在同一文件夹中,可能还可以找到一个名为ngen.exe的文件,它“生成本机代码,使应用程序无需在运行时经过即时编译过程”。请参见:
https://books.google.com.au/books?id=iZM1jyqiyakC&pg=PA453&lpg=PA453&dq=guide++vbc.exe&source=bl&ots=UB041mSfni&sig=ACfU3U0xtmS8X9p0eDKD-u6bt-WvOVCbmQ&hl=en&sa=X&ved=2ahUKEwjshc6589_lAhXXXSsKHcTaBlUQ6AEwD3oECAYQAQ#v=onepage&q=guide%20%20vbc.exe&f=false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接