燃燒一小時寶貴青春才查出問題 Orz,PO 文留念。

同事報案,某個用 SQL Agent 定期跑的批次檔 (.bat) 執行無效,原因不明。其寫法類似如下範例,看起來沒什麼問題:

實測開 DOS 視窗直接跑 ImportBOMFromSysA.bat 正常,於是我將偵察方向導向 SQL Agent 執行時工作目錄是 Windows\System32 所致,但檢查該批次檔有依 TIPS-指定主控台應用程式的工作目錄 一文所提使用 CD 改路徑技巧,加上其 Log 檔未輸出至 System32,初步排除可能。嘗試手動執行 SQL Agent Job,執行歷程顯示程式執行正常,Exit Code 為 0,代表程式未出錯,而 Log 檔未見相關偵錯訊息軌跡,感覺是程式完全沒執行。

開啟 Process Monitor 觀察,至始至終沒看到讀寫 ImportBOMFromSysA.bat 檔案的記錄,這就不合理了。試將 .bat 檔搬走,SQL Job 居然也沒出錯,一怒之下,將原指令清除改成 D:\Batch\WTF.bat,這才冒出找不到執行檔的錯誤。

回頭再看一次原指令,我似乎懂了什麼。恢復原寫法,將 rem 註解行刪除,ImportBOMFromSysA.bat 便跑了起來。

原來,命令輸入欄雖然可以輸入多行,只有第一行是有效的啊啊啊啊...

理解了這點,下對關鍵字蒐集不少人的踩坑經驗:

面對此一限制的有效解法是用 &&  串接多行指令,但我們的案例第一列是 REM 註解不適用本招,因此我將 REM 移至第二行解決問題。


Comments

# by 小熊子

寫bat會比較好哦

Post a comment