檔名式的程式遞迴法

最近 DR 工作的地方開始使用線上打卡系統,來取代原本以門禁刷卡做出缺勤管理的方式。而這項變化也不免讓人思考,是否有更加自動化的打卡方式?由於 DR 上班做的第一件事就是將電腦開機,至於關機則也是下班時的固定動作。於是便嘗試利用 Python 及 Selenium 撰寫了一支打卡程式,然後設法將它結合在電腦開關機的程序裡。

 

使用的作業系統為 Windows 7,一開始 DR 是將打卡程式加入到群組原則(gpedit.msc)的啟動 / 關機指令碼裡,但測試結果並不是很理想。於是便改為將程式捷徑放進使用者的「啟動」資料夾裡,讓打卡程式在進入桌面後自動執行。

 

至於關機的部份,則是再寫一支名為 shutdown.bat 的批次檔。該批次檔的作用是先後執行打卡程式及關機指令,因此只要使用者(也就是 DR 自己)的關機操作方式改為點選該批次檔,便會在關機前執行打卡動作。批次檔的內容如下:

@echo off
time_clock_automatic.py
shutdown /s /t 30

 

然而在實測批次檔時卻出現問題,明明打卡程式裡並沒有如此設計,但「time_clock_automatic.py」卻在執行完畢後一再重複執行,而始終沒有執行到關機指令。

 

一時之間,DR 也想不出來是怎麼回事,於是便上網搜尋看看。接著找到一篇 Stack Overflow 提問,還沒看問題敘述,光看到答覆中的「I renamed the batch file to....」就瞬間意識到自己實在是個笨蛋……因為批次檔名為「shutdown.bat」,所以「shutdown /s /t 30」不會去執行關機指令,而是批次檔自己。

 

拜 Windows 如此寬鬆的檔案執行方式之賜,讓人不知不覺做出了一支無限遞迴程式。至於解法也很單純,後來 DR 便將批次檔更名為「poweroff.bat」解決。

 

Tags: