破译 Jason Faulker 编写的 "Make EXE from BAT" 脚本

Deciphering "Make EXE from BAT" Script written by Jason Faulker

我发现了一种方法可以将我的 .bat 与工具的依赖关系转换为 .exe 文件。但是,当我尝试使用脚本和 运行 创建的 .exe 时,我总是会收到错误消息。看来我修改脚本不正确。

有人可以帮忙吗?

这是我修改后的代码:

@ECHO OFF
ECHO Make EXE From BAT
ECHO Written by: Jason Faulkner
ECHO SysadminGeek.com
ECHO.
ECHO.

REM Usage:
MakeExeFromBat BatFileToConvert -bat MyProgram.bat
REM
REM Required Parameters:
BatFileToConvert -save MyProgram
REM     Source batch file to use to produce the output Exe file.
REM
REM Optional Parameters:
IncludeFile -include Tool.exe
REM     Additional files to include in the Exe file.
REM     You can include external tools used by the batch file so they are available on the executing machine.

SETLOCAL

REM Configuration (no quotes needed):
SET PathTo7Zip=C:\Desktop\


REM ---- Do not modify anything below this line ----

SET OutputFile="%~n1.exe"
SET SourceFiles="%TEMP%\MakeEXE_files.txt"
SET Config="%TEMP%\MakeEXE_config.txt"
SET Source7ZFile="%Temp%\MakeEXE.7z"

REM Remove existing files
IF EXIST %OutputFile% DEL %OutputFile%

REM Build source archive
ECHO "%~dpnx1" > %SourceFiles%
:AddInclude
IF {%2}=={} GOTO EndInclude
ECHO "%~dpnx2" >> %SourceFiles%
SHIFT /2
GOTO AddInclude
:EndInclude
"%PathTo7Zip%za.exe" a %Source7ZFile% @%SourceFiles%

REM Build config file
ECHO ;!@Install@!UTF-8! > %Config%
ECHO RunProgram="%~nx1" >> %Config%
ECHO ;!@InstallEnd@! >> %Config%

REM Build EXE
COPY /B "%PathTo7Zip%zsd.sfx" + %Config% + %Source7ZFile% %OutputFile%

REM Clean up
IF EXIST %SourceFiles% DEL %SourceFiles%
IF EXIST %Config% DEL %Config%
IF EXIST %Source7ZFile% DEL %Source7ZFile%

ENDLOCAL

这并不是真正将 bat 文件转换为 exe。它只是创建一个包含 bat 文件的自解压存档 (exe)。在执行时,它将文件提取到一个临时文件夹并从那里运行。您甚至可以使用 7zip/rar/winzip 或任何其他存档程序从 exe 中提取 bat。

如果你想真正将 bat 转换为 exe,你应该使用来自网络的工具之一(比如这个:http://www.f2ko.de/index.php?lang=en)或者考虑使用像 AutoIt 这样的简单脚本语言。

如果你选择第二个,你可以简单地用 Run("put your bat code in here") 执行你的 bat 代码,你可以将你的脚本编译成一个“真正的”exe 文件。

对于另一种方法,您基本上可以使用 WinRAR 执行 (制作 7z-SFX)中描述的相同操作。这样,您也可以使用 GUI,我会尝试添加一些更有用的信息。

实际上,您还可以使用后一种方法来生成可移植应用程序,它还可以将每个 运行 可(或可打开)文件“转换”为 .exe.


如果您需要“可移植性破解”,您应该使用 Universal Extractor. Details can be found in this Article 解压 .exe.msi 安装程序,第 1 步到4. 较新版本的 7zip 或 WinRAR 也具有类似的功能.

  • 现在您将所有需要的文件添加到存档中。在最简单的情况下,这只是您的 .bat 脚本或您想要的任何文件“转换”为 .exe 应用程序。 (Step 5 here)

  • Steps 6 and 7 are just some Settings for the SFX-Archive, 8 是有趣的,因为你 select 你真正想要的 运行 在那里。输入您的 (.bat-) 文件的名称。

  • 第 9 步让您 select 解压到哪里 - 您可以在 MakeExeFromBat.bat 脚本中以编程方式手动执行此设置。

  • 在这个过程之后你创建了一个 SFX archiever 形式的便携式应用程序,享受


“转换”一词被放在引号中,因为 运行宁 .exe 实际上是这样工作的:

  1. (SFX-)EXE文件的内容从“归档部分”提取到一个目录作为指定的临时目录。

  2. (读取脚本生成的config文件。)

  3. 以前包含在EXE文件中然后提取的文件现在在新的window.

    中执行

    a) 这个文件除了 .bat 之外还可以是任何东西——例如图片、MP3 或视频

    b) 或者 Python 脚本(当然你的 OS 需要知道如何处理那个文件。

  4. 完成后,临时文件将被删除。

您还可以从中得出一些限制。如果你有一个 .bat 需要工作目录的内容,你就会遇到问题。 (比如,将当前目录中的所有文件从 1 重命名为 n 的批处理。)在某些情况下,也可以通过将所有需要的文件添加到存档中来处理。在 Windows Vista 和所有更新的 OSes 上,您可能会遇到 a message box after the script is run。在 selecting ‘此程序安装正确’后,此文件的消息框将不会在以后显示。因为 EXE 文件在新的 window 中启动,所以记录输出的典型方式(使用 > 字符)将无法按预期工作。为了记录输出,您需要在源脚本中本地处理它。


所有参考文献都已链接,但再一次:大功劳归于 Jason Faulkner for providing the Article and 7zip-Approach, binbert for the WinRAR-SFX Solution (which is as hinted much more versatile -> portability) and some credit to creative8 for finding the two and the article comparing them

实际上,我正在使用 AutoHotkey 开发另一种解决方案。就我而言,我只想将我的 .bat 添加到 windows 开始菜单 - 但选项不限于此。

脚本本身只是一个单行代码 .AHK is easily converted to .exe (I used v1.1.33.09):

run % SubStr(A_ScriptName, 1, -4) ;// run also has the option to run your file minimized or hidden, see the source 2 below

Source 2

它所做的是采用自己的名称,分别删除 .ahk.exe(最后 4 个字符,因此 -4)和 运行ning .用法再简单不过了:您有一个 runme.bat,所以您将 program I provide 重命名为 runme.bat.exe。假设您希望 .exe 打开一个 image.png - 猜猜是什么,将其重命名为 image.png.exe。你明白了要点 - 就是这样。它会动态检查其名称以查找要 运行 的内容。在我看来,这并不比“解压 .bat 然后 运行”强大得多,但是(再次恕我直言)它更加优雅。

Use it as you wish, I should probably start a public github page or so.