🔧為什麼批次檔(.bat)會出現「系統發生 85 或 1219 錯誤」?軟體工程師用白話講給你聽!

 

📘 文章內容

🧩 前言:看不懂的黑底白字錯誤訊息,到底在說什麼?

很多公司內部的資料交換或自動化流程,會用 批次檔(.bat) 來執行多個任務,比如:

  • 掛載公司內部的伺服器資料夾

  • 執行 Java 或 Python 程式

  • 自動匯入資料庫

但有時候一執行 .bat 就跳出以下訊息:

系統發生 85 錯誤。 本機裝置名稱已在使用中。 系統發生 1219 錯誤。 不允許使用多於一個使用者名稱的相同使用者有多個連線到一個伺服器。

看起來很可怕,但其實是「Windows 正在保護你不要重複登入相同伺服器」的機制在發作。


💡 一、發生的背景:自動化批次檔的流程

一個典型的自動化流程通常長這樣:

  1. 先用 net use 指令掛載網路資料夾(例如:Z 槽、Y 槽)

  2. 接著執行 Java 程式,從這些資料夾中讀取檔案

  3. 最後將分析結果寫入資料庫

用白話來說,就是「電腦先開門拿資料,再交給程式處理」。


🚨 二、問題是怎麼發生的?

🔹 錯誤 85:磁碟代號已經被用過

這就像你要把 USB 插到電腦上,但那個插槽被別人佔住。
Windows 說:「這個代號(例如 Z:)已經有別的網路路徑在用了」,所以拒絕新的連線。

解決方法:
在執行前先清除所有舊連線:

net use * /delete /y

這行意思是「把所有舊的網路連線都斷掉」。


🔹 錯誤 1219:同一伺服器被不同帳號重複登入

假設你登入公司內網資料夾 A 時,用帳號 A123;
但接著要連資料夾 B,又用了同一伺服器、不同帳號 B456。
Windows 會說:「同一台伺服器不能用兩個不同身分重複登入」,因此報錯 1219。

解決方法:

  1. 登出舊連線再登入:

    net use * /delete /y net use Z: \\server\folder /user:company\yourname yourpassword
  2. 或者讓兩個共享資料夾分別透過不同的伺服器別名存取(例如改用 IP 或 DNS 別名)。


🧰 三、後續造成的程式錯誤

批次檔掛載失敗後,如果程式(例如 Java、Python)還繼續執行,就會出現:

java.io.IOException: 使用者名稱或密碼不正確。

這並不是密碼真的錯,而是因為路徑根本沒掛上去
程式試圖開啟一個不存在的資料夾,結果 Windows 回傳「權限錯誤」。

修正建議(以 Java 為例)

File sourceFolder = new File("Z:\\data\\input"); if (!sourceFolder.exists()) { System.err.println("⚠️ 找不到資料夾,請確認網路磁碟是否已成功掛載。"); return; }

這樣即使掛載失敗,也不會讓整個程式崩潰。


🧱 四、為什麼有些程式仍然成功?

通常企業會分好幾支小程式(例如處理不同客戶資料)。
假設其中兩支需要網路磁碟、另一支只用本機資料夾,
那麼只有前兩支報錯,最後一支仍會成功執行並寫入資料庫。

也就是說:「前半段斷了,但後半段還在跑」,
這在自動化排程裡其實很常見。


🔍 五、工程師實務建議

問題 原因 解決方式
系統錯誤 85 磁碟代號被佔用 net use * /delete /y 清除連線
系統錯誤 1219 同一伺服器多帳號登入 登出舊帳號或使用不同伺服器別名
Java/Python IOException 掛載失敗導致找不到路徑 加入 exists() 檢查避免崩潰
部分程式仍執行成功 不依賴網路磁碟或路徑正確 屬正常現象

🧩 六、專業改良版批次檔範例(已匿名改寫)

以下是一個更穩定的批次檔範例,能自動偵測錯誤:

@echo off echo ===== 自動掛載開始 ===== rem 清除所有舊連線 net use * /delete /y rem 嘗試掛載資料夾 net use Z: \\server1\shareA /user:company\user1 password1 || ( echo ⚠️ 掛載 Z: 失敗,請檢查帳號密碼。 exit /b ) net use Y: \\server1\shareB /user:company\user1 password1 || ( echo ⚠️ 掛載 Y: 失敗,請檢查網路狀態。 exit /b ) rem 執行資料處理程式 java -jar processData.jar || ( echo ⚠️ 程式執行失敗,請檢查日誌。 exit /b ) echo ✅ 所有任務完成! pause

這樣設計的好處是:

  • 若掛載錯誤,程式會立即停止,不會白跑。

  • 所有錯誤都會在畫面上提示使用者。


🧭 七、延伸小知識:為什麼企業常用批次檔?

批次檔是一種「自動幫你重複做相同工作」的腳本工具。
它可以排程每天自動登入伺服器、搬資料、匯入資料庫。
雖然老派,但穩定性極高,是許多企業自動化流程的骨幹。


✅ 八、總結

重點 說明
錯誤 85 路徑重複使用、磁碟代號衝突
錯誤 1219 同伺服器多帳號衝突
Java IOException 掛載失敗導致路徑不存在
預防方式 清除舊連線、檢查網路、在程式中加入安全檢查

簡單來說,這不是你的密碼錯,而是電腦在「保護自己不要被重複登入」而報錯。
只要依照上面幾步檢查與清除連線,就能輕鬆讓自動化流程重新順利運作!

留言

這個網誌中的熱門文章

🔍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 錯誤與資料欄位動態插入顯示問題