![Windows 任务计划程序 - 每天登录时运行一次任务](https://linux22.com/image/1482524/Windows%20%E4%BB%BB%E5%8A%A1%E8%AE%A1%E5%88%92%E7%A8%8B%E5%BA%8F%20-%20%E6%AF%8F%E5%A4%A9%E7%99%BB%E5%BD%95%E6%97%B6%E8%BF%90%E8%A1%8C%E4%B8%80%E6%AC%A1%E4%BB%BB%E5%8A%A1.png)
我正在尝试设置一个计划任务,以便每天精确运行一次 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\Start Menu\Programs\Startup
对于所有用户:
C:\ProgramData\Microsoft\Windows\开始菜单\程序\启动
希望这可以帮助!