
我正在嘗試設定一個計劃任務以每天運行一次 exe。我已經嘗試過以下方法:
每天凌晨 4:00 觸發,“錯過預定開始時間後儘快運行任務”
如果我的帳戶沒有設定密碼,則此方法非常有效,在這種情況下,Windows 會直接啟動到桌面 - 經過短暫的延遲後,任務就會運行。
當我向帳戶添加密碼時,任務不再運行。在任務歷史記錄中,我看到記錄了警告:
任務計劃程式未啟動任務“X”,因為滿足啟動條件時使用者“Y”未登入。使用者操作:確保使用者已登入或變更任務定義以允許在使用者登出時啟動。
這似乎是一個愚蠢的警告 - 在“安全選項”下,我選擇了“僅在用戶登入時運行”。為什麼任務計劃程式嘗試在使用者登入之前啟動任務?
每天凌晨 4:00 和「登入時」觸發,盡快運行
這種方法沒有達到我想要的效果,也就是我想要的兩個都條件為真,即如果「每天凌晨 4:00 之後」為真且「登入」為真,則執行任務;對於當天的每個連續「登入」事件,「每天凌晨 4:00 之後」不會為真,因此它將等待第二天。不幸的是,這不是任務計劃程序的工作方式,透過這種方法,任務在每一個登入.
無論用戶是否登入都運行
我無法使用這種方法,因為我嘗試執行的 exe 有時需要使用者輸入才能完成。一般來說,有多種原因可能導致無法使用此選項。
其他選項
在絕望的解決方法領域,我正在考慮編寫一個批次腳本,該腳本將寫入檔案並能夠檢測它之前是否被呼叫過。
肯定有更好的方法來實現這個看似常見且簡單的調度用例嗎?
答案1
每天登入時執行一次任務
我正在嘗試設定一個計劃任務以每天運行一次 exe。
我正在考慮編寫一個批次腳本,該腳本將寫入文件並能夠檢測它之前是否被調用過。
好的,以下是一個具有非常基本和簡單的批次腳本邏輯的範例,正如您在評論中所述,對於您面臨的問題,可能對您的情況有用。
我還將參考另一篇關於任務計劃程序的文章(在本答案的底部),其中包含陷阱等,以防萬一您在執行批次腳本時遇到任務計劃程序無法按預期工作的進一步問題。即使您在配置中專門選擇的選項以及作業系統可能不同,但此級別的問題可能仍然相同,因此如果您在使用任務計劃程序進行批量調度時遇到問題,請快速查看該帖子按預期工作。
基本腳本分解
此
FOR /F
循環建立YYYYMMDD
用於當前日期的變數。這
CheckDir
是一個本機磁碟機路徑,甚至是一個 UNC 路徑,您每天\\servername\sharename\folder
都會將這個小檢查檔案及其檔案名稱的一部分放在其中。YYYYMMDD
- 只需將
C:\Path
UNC 路徑變更或插入到您的環境中需要指向的位置即可
- 只需將
僅是
checkfile
檔案名稱%CheckDir%\
前面帶有 ,並%DT%
在 .txt 副檔名之前附加到檔案結尾。例如,它會為您提供C:\Path\VersionBackup_20130202.txt
今天的最終結果,如我的範例所示。- 這實際上將檢查今天的檔案是否存在,如果存在,則結束腳本,如果不存在,請建立它,然後執行 VersionBackup.exe(無論其 EXE 名稱如何)。這樣,可以使用任務計劃程序將這個東西安排為每小時一次,指向批次腳本,並且根據批次腳本邏輯,它每天只允許運行一次。
只需
START "" "C:\Path\VersionBackup.exe"
指向執行版本備份作業的 EXE 名稱所在的完整路徑。
批次腳本範例
@ECHO ON
:::: SET YYYYMMDD format for date
FOR /F "TOKENS=2-4 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%C%%B%%A"
:SetCheckFile
SET CheckDir=C:\Path
SET checkfile=%CheckDir%\VersionBackup_%DT%.txt
IF NOT EXIST "%CheckDir%" MD "%CheckDir%"
IF EXIST "%checkfile%" GOTO EOF
ECHO Creating the check file for date %DT% to ensure only one Version Backup run for the day>>"%checkfile%"
:StartApp
START "" "C:\Path\VersionBackup.exe"
GOTO EOF
答案2
將 .exe 放入以下資料夾之一,以便在電腦啟動時運行它。您無需在任務計劃程序中執行任何操作。
僅適用於目前使用者:
C:\Users\使用者名稱\AppData\Roaming\Microsoft\Windows\開始功能表\程式\啟動
對於所有使用者:
C:\ProgramData\Microsoft\Windows\開始功能表\程式\啟動
希望這可以幫助!