🍀Windows 批次檔跑資料 Loader 失敗怎麼查?從「CSV 解析錯誤、檔案被占用、JSON 欄位缺失」一步步看懂(工程師白話版)

你有沒有遇過這種情況:

  • 你在 Windows 命令列跑了一串 Loader(資料匯入程式)

  • 看起來「秒跑完」,但資料卻沒進去

  • 或者跑到一半爆出一堆錯誤:CSV 解析失敗、JSON 欄位找不到、檔案搬移失敗

如果你不是工程師,看到這些 log 真的會像外星語一樣。本篇用「工程師白話」帶你看懂常見的三種錯誤,以及你可以怎麼排查。


一、先理解:你跑的通常是「兩段式流程」

很多公司內部的資料匯入會拆成兩段:

① 掃描/整理檔案(前段)

常見是 Python、Shell、或自寫工具。它的工作像是:

  • 到資料夾裡找檔案(支援子資料夾)

  • 判斷檔案類型(CSV、XLSX、SUM…)

  • 把檔案搬到「待處理區」

示意指令(已改成假資料)

C:\Tools\Python\python.exe C:\Loader\scan_files.py --vendor=VENDOR_A --category=CHIP --format=csv --quiet scan C:\Data\incoming\VENDOR_A

跑完後通常會顯示類似:

  • 掃到了多少檔

  • 花了幾秒

  • 有沒有明顯錯誤

如果這段只顯示「耗時 0.00s / 1.00s」且沒有 error,通常代表:它成功掃描,但不代表資料已進資料庫

② 真正解析 + 寫入資料庫(後段)

第二段常見是 Java JAR 或 .exe,負責:

  • 讀 CSV / Excel

  • 轉成 JSON 或某種結構

  • 寫入資料庫

  • 成功就搬到 success,失敗就搬到 fail

示意指令:

java -jar C:\Loader\ImportEngine.jar VENDOR_A

你遇到的大部分錯誤,往往都在「第二段」。


二、錯誤 1:CSV 解析炸掉(ArrayIndexOutOfBounds)

你可能會看到這類 log:

  • 解析某個 CSV 時直接丟例外(Exception)

  • 錯誤像:陣列超出範圍(ArrayIndexOutOfBounds)

這是什麼意思?(白話)

Loader 在讀 CSV 的某一行時,預期會有「至少兩欄」,例如:

  • 欄位 0:欄名或第一個值

  • 欄位 1:第二個值

但實際那一行可能是:

  • 空行

  • 只有一個欄位

  • 分隔符號不對(它以為是逗號,但檔案其實是分號或 Tab)

  • 有奇怪的引號/編碼讓它切欄失敗

所以它去拿「第二欄」時,就直接爆炸。

你可以怎麼做?(不懂程式也能做)

  1. VS Code / Notepad++ 打開那個 CSV

  2. 看最上面的「標題列 header」是不是正常

  3. 往下找有沒有:

    • 空白行

    • 欄位數明顯較少的行

    • 一整行怪符號

如果你找到「某一行很短或空白」,通常就是罪魁禍首。


三、錯誤 2:失敗檔案搬不到 fail(檔案被占用)

你也可能看到:

  • 解析失敗後,程式想把檔案移到 fail

  • 結果 Windows 回:檔案正被其他程式使用

這是什麼意思?(白話)

Loader 想「搬家」:

  • process 搬到 fail

但 Windows 說:

還有人抓著這個檔案不放(有人正在使用它),不能搬。

常見原因:

  • 你有用 Excel 打開過那個 CSV,忘了關

  • 防毒掃描中

  • 或更常見:Loader 自己讀檔後沒有關檔(程式 bug)

你可以怎麼做?

  1. 確認 Excel、記事本、VS Code 沒有開著該檔案

  2. 打開 工作管理員(Ctrl + Shift + Esc)

  3. 看是不是有卡住的:

    • java.exe

    • python.exe

    • 其他背景程式

  4. 必要時結束程序,再重跑

如果每次都一樣搬不動,而且你確定沒開檔,那很可能是 Loader 本身沒有釋放檔案資源,需要回報給維護 Loader 的同事修程式。


四、錯誤 3:JSON 欄位找不到(JSONObject["xxx"] not found)

另一種常見錯誤是:

  • 程式說 JSON 裡找不到某個欄位(例如 "Item Name"

這是什麼意思?(白話)

Loader 在轉資料時「認定一定會有某個欄位」。

例如它預期 CSV 的 header 有:

  • Item Name

  • Test Time

  • Bin No

但你的檔案可能是:

  • 欄位名稱改了(大小寫不同、空白不同)

  • 欄位不存在(供應商格式更新了)

  • 欄位改成中文或縮寫

結果 Loader 仍照舊去找舊欄位,就會爆。

你可以怎麼做?

  1. 打開該 CSV

  2. 看第一列 header 有沒有那個欄位

  3. 如果沒有,代表:

    • 檔案格式真的變了

    • 或 Loader 要更新 mapping(欄位對應)

這種通常不是「你重跑就會好」,而是要 調整 Loader 規則/程式 才能解。


五、如何「中止正在跑的 exe / loader」:三種最簡單方法

有時候 Loader 卡住或跑太久,你需要先停掉:

方法 1:在命令列按 Ctrl + C

最常見、最溫和。

方法 2:關閉視窗(X 或 Alt+F4)

適合獨立視窗的程式。

方法 3:工作管理員強制結束(最強制)

  1. Ctrl + Shift + Esc

  2. 找到 java.exe 或你的 loader 程式

  3. End Task

若你跑的是整串 .bat,通常殺掉主要的 java.exe 就會停。


六、工程師實務建議:要快速定位問題,你只要抓三個重點

即使你完全不懂程式,也可以用這三招大幅縮小範圍:

  1. 出錯的是哪個檔名?
    log 都會印出「正在 parse 哪個檔」。先把檔名記下來。

  2. 錯誤類型屬於哪一種?

    • ArrayIndexOutOfBounds → CSV 行/欄格式異常

    • FileSystemException(檔案被占用)→ 有人沒關檔/程式沒放資源

    • JSONObject 欄位不存在 → 格式改版/欄位不一致

  3. 失敗檔案最後有沒有搬到 fail?

    • 有 → 代表流程有收尾,你可以集中查格式

    • 沒有 → 可能檔案被鎖住,需要先解除占用


結語:你不是在「修程式」,你是在「修輸入資料與規則的落差」

很多人以為 Loader 出錯就是「電腦壞了」,其實多半是:

  • 供應商資料格式改了

  • 某幾行資料不乾淨(空行、少欄)

  • Loader 程式沒有防呆或沒有更新欄位 mapping

  • 或出錯後沒有正確釋放檔案資源(導致無法搬移)

掌握本篇這三種錯誤,你下次再看到 log,就能快速判斷:

  • 這次是「檔案內容問題」?

  • 「格式改版問題」?

  • 還是「Loader 程式需要修」?

留言

這個網誌中的熱門文章

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

🖥️遠端桌面連線完整新手指南:Windows RDP、Chrome Remote Desktop、AnyDesk、TeamViewer 一次搞懂

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