你寫好了一個能正常執行的批次檔或 PowerShell 指令碼,現在想把它當成單一 .exe 交給別人:一個按兩下就能執行的檔案,不會跳出「開啟方式」的詢問,也沒有滿是命令的主控台。

這並不需要線上「BAT 轉 EXE 轉換器」。Windows 已內建能做到這件事的工具,PowerShell 也有一個免費開源的模組,能對 .ps1 指令碼做同樣的事。兩者都在你自己的電腦上執行,所以你得到的檔案只由你的指令碼產生,別無其他。

趕時間嗎?

  • 批次檔(.bat / .cmd):按 Win + R,輸入 iexpress,並以安裝命令 cmd /c yourscript.bat 封裝檔案。
  • PowerShell(.ps1):先執行一次 Install-Module ps2exe -Scope CurrentUser,再執行 Invoke-ps2exe .\script.ps1 .\script.exe。
  • Python(.py):pip install pyinstaller,然後 pyinstaller --onefile script.py。
  • 想要圖示?用免費的圖示擷取工具從任何程式中取出一個。

方法 1:用 IExpress 將 BAT 轉為 EXE(Windows 內建)

IExpress 成為 Windows 的一部分已有數十年。它原本用來製作小型安裝程式:把檔案封裝成一個 EXE,在 EXE 執行時解壓縮到暫存資料夾,然後啟動一個命令。這個命令可以就是你的批次檔。

  1. 按 Win + R,輸入 iexpress,然後按 Enter。
  2. 選擇 Create new Self Extraction Directive file,然後按一下 Next。
  3. 選擇 Extract files and run an installation command。
  4. 為套件設定標題(會顯示在所有訊息的視窗標題中)。
  5. 確認提示:No prompt。授權合約:Do not display a license。
  6. Packaged files:按一下 Add,選取你的 .bat 檔案(以及它需要的其他檔案)。
  7. Install Program:自行輸入 cmd /c yourscript.bat,並換成你的檔案名稱。只從清單中選擇 .bat 常常沒有作用,因為 IExpress 不會直接啟動批次檔。
  8. Show window:選 Default 可看到主控台,選 Hidden 則在背景靜默執行。
  9. 完成訊息:No message。
  10. Package name:選擇 EXE 的儲存位置,並勾選 Hide File Extracting Progress Animation from User 和 Store files using Long File Name inside Package。
  11. Restart:No restart。如果之後想重新建置,請儲存 SED 檔案,然後按一下 Next 建立 EXE。

需要注意一點:指令碼是從暫存資料夾執行,而不是 EXE 所在的位置。像 copy data.txt backup\ 這樣的程式行會在該暫存資料夾中尋找。對於指令碼在套件外讀寫的檔案,請使用完整路徑(%USERPROFILE%\Documents\data.txt)。

方法 2:用 ps2exe 將 PowerShell 轉為 EXE

ps2exe 是免費開源的 PowerShell 模組,發佈在官方 PowerShell Gallery。它把 .ps1 指令碼包進一個執行它的小型 EXE,並可設定圖示、版本,以及是否顯示主控台視窗。

  1. 開啟 PowerShell(不需要系統管理員權限),安裝一次該模組:
    Install-Module ps2exe -Scope CurrentUser
    如果 PowerShell 詢問是否安裝 NuGet 提供者或是否信任 PSGallery 存放庫,請回答 Y.
  2. 前往指令碼所在的資料夾並建置 EXE:
    Invoke-ps2exe .\script.ps1 .\script.exe
  3. 實用選項:
    • -noConsole:不顯示主控台視窗(適用於顯示表單或訊息方塊的指令碼)。
    • -iconFile .\app.ico:EXE 的圖示。
    • -requireAdmin:啟動時要求系統管理員權限。
    • -title "My Tool" -version "1.0.0":Windows 在檔案內容中顯示的資訊。

比起命令列更喜歡視窗介面?安裝模組後執行 Win-PS2EXE:同一個工具,只是多了一個小表單。

其他指令碼:Python、AutoHotkey、Node.js

  • Python:pyinstaller --onefile script.py 會在 dist 資料夾中產生一個 EXE。有視窗的程式請加上 --noconsole。
  • AutoHotkey:安裝程式內含 Ahk2Exe:在 .ahk 檔案上按右鍵,選擇 Compile Script。
  • Node.js:較新版本(20 以上)可以建置單一執行檔應用程式(請參閱 Node.js 文件中的「Single executable applications」頁面)。

你真的需要 EXE 嗎?

很多時候,更簡單的方法就夠了:

  • 捷徑。在 .bat 檔案上按右鍵,選擇 Send to → Desktop (create shortcut)(傳送到 → 桌面建立捷徑),然後在捷徑內容中為它設定圖示。按兩下即可執行指令碼。
  • 排程工作。對於需要每天執行或在登入時執行的指令碼,工作排程器可以直接執行 .bat 或 .ps1。
  • 直接使用指令碼本身。如果你分享的對象使用 Windows,.bat 檔案按兩下就能執行。

所有「BAT 轉 EXE 轉換器」都沒告訴你的三件事

  1. 你的程式碼並沒有被隱藏。這些工具把指令碼存放在 EXE 內部,通常是純文字。任何人都能把它讀出來,例如使用我們的字串擷取工具,它能列出任何檔案中的可讀文字。切勿在其中放入密碼、權杖或金鑰。
  2. 防毒軟體可能會發出警告。惡意軟體也使用同樣的封裝方式,因此 Windows Defender 和 SmartScreen 可能會對完全無害的指令碼 EXE 提出警告。用程式碼簽署憑證簽署會有幫助,Microsoft 也接受你自製檔案的誤判回報。
  3. 來自網站的 EXE 是你無法檢查的檔案。線上轉換器傳回的檔案,是在一台你一無所知的伺服器上產生的。所以我們不提供轉換器,而是說明系統內建的方法:使用 IExpress 或 ps2exe,你清楚知道檔案裡放了什麼。

收到別人傳來的 EXE,想在開啟前知道它會執行什麼?請閱讀如何在不執行的情況下分析 EXE。

完成其餘工作的免費工具

所有工具都在瀏覽器中執行:你的檔案不會上傳到任何地方。

用圖示擷取工具為你的 EXE 取得圖示