用批次檔仿製Windows排程

目前使用Windows10的電腦, 完全不連上Internet的環境, Windows10的排程每2~3個月會發生排程完全無作用的情況, 但再1天後又恢復正常.

而異常的那一天, 很多排程還是要運作, 因此寫一個批次檔, 來仿製Windows的排程, 原則上以分為單位.

使用的技巧:

  1. 用ping -n 1 127.0.0.1 > NUL來產生大約1秒的間隔.
  2. 用迴圈內判斷是否仍是同一分鐘, 如果是, 就暫時不跑主程式.
  3. 利用%time%參數抓時間.
寫出來就大約是這樣:

@echo off
rem 2020/01/09
rem PahKun

:start
rem 用%%f再呼叫主程式, 因為主程式會重複使用到目前分鐘數來判斷.
for %%f in (%time:~3,2%) do call :main %%f
goto :start
goto :end

:main
rem 每1分鐘執行一次以下的副程式
rem EXAMPLE
rem call :schtasks %1 00 "backup_to_nas"
call :schtasks %1 00 "backup_to_nas"
call :schtasks %1 15 "backup_to_nas"
rem 副程式執行完成
:loop
rem 每間隔1秒檢查是否已經到下1分鐘
ping -n 1 127.0.0.1 > NUL
if %1==%time:~3,2% goto :loop
rem exit :main
exit /b
goto :end

:schtasks
rem 如果目前分鐘與預定分鐘相同, 執行原本預定的排程.
if %1==%2 schtasks /run /tn %3
exit /b
goto :end

:end

https://www.linkedin.com/pulse/%25E7%2594%25A8%25E6%2589%25B9%25E6%25AC%25A1%25E6%25AA%2594%25E4%25BB%25BF%25E8%25A3%25BDwindows%25E6%258E%2592%25E7%25A8%258B-%25E8%2590%258A%25E5%25A7%2586-%25E5%258F%25B2