2014-12-05 268 views
0

我有一个.bat文件,它打开一个与它所在的目录相同的程序。它需要程序及其所有数据。现在是我们将批处理文件和文件夹打包到一个exe文件中的一种方式,因此它只需点击一次即可运行,只需分发一个文件即可。如何打包一个.bat文件和一个exe文件

请索取任何附加信息。

+0

那么,有[NSIS](http://nsis.sf.net/),但要准备好一点点的学习曲线,然后才能做到你想要的。 – rojo 2014-12-05 13:04:23

+0

另外,请查看[7-zip sfx](http://superuser.com/questions/42788/)。这里有一个[教程](http://www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless-installer/)。 – rojo 2014-12-05 13:50:27

+0

检查iexpress。它内置在每台Windows机器上,并有一个用户界面,可以做一些事情。 – npocmaka 2014-12-05 13:52:56

回答

0

这可以使用的7-Zip自解压文件来完成。我创建的这个书面记录很久以前开发的脚本,使容易创造这些“自包含”包的过程:

http://www.howtogeek.com/50364/convert-a-batch-bat-script-to-an-executable-exe-file/

例如,运行此命令:

MakeExeFromBat.bat MyBatFile.bat SomeTool.exe SomeOtherBatFile.bat 

会生成MyBatFile.exe,其中包含BAT文件(您的和依赖项)以及批处理文件可用于调用的EXE。

一旦运行,过程是这样的:

  1. MyBatFile.exe内容解压到一个临时目录。
  2. MyBatFile.bat被执行并运行。任何传递的命令行参数都会发送到MyBatFile.bat,以便您可以正常使用它们。
  3. 完成后,将清理临时目录。

由于这种处理是由SFX,关于此需要提及的局限性的几个重要通知(我不知道的工具或解决方法可以克服这些限制的)来完成:

  • 运行EXE文件后,它将在新的命令窗口中处理 - 不是当前的。这意味着您的脚本将不会有任何关于当前cmd实例的知识,除非您通过参数提供它们。
  • 基于上述情况,相对路径不起作用。例如,您将\Subdir作为参数传递给MyBatFile.exe(同样在新的cmd实例中打开),那么\Subdir将尝试解析到提取它的temp结构中的路径。您可以通过始终提供完整路径名称来解决此问题。

但是,大部分情况下,如果您不处理用户提供的文件处理,这些限制将不会发挥作用。