﻿# 介紹好用工具：Bat To Exe Converter

我時常在寫批次檔(Batch, \*.bat)幫助我處理一些日常的工作，例如說備份資料庫、建立 SSH Tunnel、或是將所有子目錄下的 .svn 目錄改成 \_svn 目錄、…等等。有些 Batch Script 甚至會寫超過一百行，若你想保護辛苦寫的批次檔時，就可以利用 [Bat To Exe Converter](http://www.f2ko.de/English/b2e/index.php) 幫你轉成 \*.exe 執行檔。

簡單的說，這套工具有 4 個特色：

1.  隱藏原始碼。（這是無庸置疑的）
2.  支援 “沒有互動視窗”的應用程式(Ghost applications)，可讓你的程式在背景作業。
3.  批次檔轉換後的執行檔可設定應用程式圖示、檔案版本、產品版本、公司名稱、程式描述、版權宣告等應用程式資訊。
4.  可以不只將批次檔轉成執行檔，還可以將批次檔相關的檔案、文件或程式也一併結合在一起。

正所謂「一圖解千文」，如下圖示就是此工具唯一的 GUI 操作介面：

[![Bat To Exe Converter v1.4.1 執行畫面](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ce876f5a2ce7f681b787-image_thumb.png "Bat To Exe Converter v1.4.1 執行畫面")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c3d68ef8f0190be2b27d-image_2.png)

下載後的壓縮檔中會有兩個檔案，一個是 **Bat\_To\_Exe\_Converter.exe** 執行檔，另一個是 help.chm 說明檔，可查詢指令列(Command Line)操作的用法。

若要透過指令列的方式執行轉換動作，至少需要設定 4 個參數才能執行，其參數的說明如下：

1.  第一個參數是**來源批次檔**
2.  第二個參數是**輸出的執行檔**
3.  第三個參數是 **Icon 的檔案路徑**
4.  第四個參數是設定你的**應用程式類型** ( Console 或 Ghost )
5.  **第五個之後的參數**都是要**外掛進來的檔案**，也就是要跟這個原本的批次檔一起工作的程式。

範例1：將 a.bat 轉成 a.exe，其中的 "" 代表不要設定 Icon，1 代表轉換成 Console application

```
Bat_To_Exe_Converter.exe  a.bat  a.exe  ""  1
```

範例2：將 a.bat 轉成 a.exe，其中的 0 代表轉換成 Ghost application ( 背景作業模式 )

```
Bat_To_Exe_Converter.exe  a.bat  a.exe  ""  0
```

範例3：將 a.bat 轉成 a.exe，並且也將 myprogram1.exe 與 test.jpg 兩個檔案都打包放進 a.exe 中，讓 a.exe 在執行時可以引用這兩個檔案。

```
Bat_To_Exe_Converter.exe  a.bat  a.exe  ""  1  myprogram1.exe  test.jpg
```

另外，我也做了個小測試，情境如下：

-   我寫一個 a.bat 內容是 **type a.txt**
-   然後建立一個 a.txt 內容是 **12345**
-   然後執行 **Bat\_To\_Exe\_Converter.exe a.bat a.exe "" 1 a.txt** 將 a.txt 綁進 a.exe 中
-   之後**將 a.txt 的內容修改**成 **67890**
-   接者我**執行 a.exe** 得到的結果是 **67890**
-   接者我從該目錄**刪除 a.txt 檔案**
-   **再執行一次 a.exe** 我得到的結果是 **12345**

由此可知，即便將檔案一併綁進轉換後的執行檔中，原本批次檔讀取的訊息還是先從原本所在的目錄讀取檔案，若讀取不到才會讀取被綁進執行檔中的檔案。
