2014-12-05 148 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結構中的路徑。您可以通過始終提供完整路徑名稱來解決此問題。

但是,大部分情況下,如果您不處理用戶提供的文件處理,這些限制將不會發揮作用。

相關問題