🔧【新手也能懂】Windows 批次檔怎麼執行 Python?一個錯誤日誌完整解析教學

👋 前言:當你用 .bat 執行 Python 卻出錯了?

很多自動化工作流程都會透過 Windows 的批次檔(.bat)來快速執行程式,尤其是當你有一個 Python 程式要每天跑資料、整理報表、抓測試數據等等。

但如果遇到錯誤訊息像是:

python.exe: can't open file 'D:\\Asmedia\\ftstdf\\ftldr20230816.py': [Errno 2] No such file or directory

就代表「檔案根本找不到」!本文就帶你一步一步看發生什麼事、該怎麼改。


🔍 問題背景:一個常見的批次檔工作流程

假設你有一個資料夾,放了以下這些檔案:

D:\Asmedia\ftstdf\ ├── ftldr20230816.py ← Python 腳本(目標要執行它) └── ftloader2.bat ← 批次檔(自動幫你執行 Python)

批次檔內部的指令如下(簡化後):

@echo off set PYTHON_EXE=C:\Users\windy\AppData\Local\Programs\Python\Python312\python.exe set SCRIPT=ftldr20230816.py echo [load start] %date% %time% %PYTHON_EXE% %SCRIPT% echo [job end]

❗ 問題出現原因是什麼?

從錯誤訊息可得知:

can't open file 'D:\\Asmedia\\ftstdf\\ftldr20230816.py'

雖然我們「以為」Python 執行檔會在目前路徑中找到 ftldr20230816.py,但事實上執行時的「工作目錄」不一定正確(例如你從其他地方右鍵執行 .bat)。


✅ 解法:用絕對路徑或動態取得目錄

🛠 改法一:加入 cd /d 轉換目錄

@echo off setlocal REM 自動切換到此批次檔所在資料夾 cd /d "%~dp0" set PYTHON_EXE=C:\Users\windy\AppData\Local\Programs\Python\Python312\python.exe set SCRIPT=ftldr20230816.py echo [job start] echo [start time] %date% %time% echo [current folder] %cd% %PYTHON_EXE% %SCRIPT% echo [exitcode] %errorlevel% echo [job end] pause

說明:

  • %~dp0:是 Windows 批次檔的「神奇變數」,代表目前 .bat 檔所在的完整路徑。

  • cd /d "%~dp0":確保切換到那個資料夾,即使在不同磁碟機(例如 D:\、E:\)也沒問題。

  • %errorlevel%:回報 Python 執行結果(0 是成功)。


🧪 測試:確保路徑與檔案都存在

請確認以下三件事:

  1. ftldr20230816.py 真的在 D:\Asmedia\ftstdf\

  2. .bat 是從正確位置執行的(推薦直接雙擊)

  3. Python 已安裝,且路徑設定正確(你可試著執行 python --version


📌 延伸技巧:如何快速知道 Python 路徑?

可以在 PowerShell 輸入:

where python

或是查看 bat 中用的路徑是否正確,例如:

C:\Users\windy\AppData\Local\Programs\Python\Python312\python.exe

也可用 %PYTHON_EXE% --version 測試。


🧠 結語:路徑是所有自動化的起點

本次錯誤的根本原因,就是 批次檔沒有明確告訴 Python 該去哪找腳本。透過 %~dp0 就能保證執行環境一致,不怕換位置或換機器。

掌握這個技巧,你就能打造出可靠的批次檔自動流程。

留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🔎EF Core 連 Oracle 出現 ORA-00600 [kpp_concatq:2] 的完整排錯指南(含 EF Core ToString/CultureInfo 錯誤)

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題