Windows 中类似于 *nix 的“at”命令

Windows 中类似于 *nix 的“at”命令

*nix 有“at”命令,可以通过管道在特定时间运行程序。如下所示:

echo "SOME_COMMAND" | at 00:00

Windows 还有一个“at”命令,它创建一个运行一次的计划任务,运行在背景中由用户 SYSTEM 执行。“schedtasks”更完整,但使用起来也很麻烦(特别是因为它需要每个任务都有一个唯一的名称,所以创建一个批处理来创建一次运行的任务 *nix 风格以模仿 *nix 的“at”的想法变得有点不切实际)。

那么,是否有一个适用于 Windows 的实用程序,可以简单、无麻烦地完成 *nix 的“at”的功能?

更新:我现在会更具体一点 =)。我试图在某个时间关闭显示器,我使用一个名为 nircmd 的命令行实用程序,因此我只需输入“nircmd monitor off”即可完成此工作。如果我在这台电脑上使用 Linux,我所要做的就是

echo "nircmd monitor off" | at XX:YY

或者创建一个“宏”。但在 Windows 中,我只有计划任务,这是创建一次性运行任务的一种相当官僚的方式,因为“at”实际上不起作用(请参阅我的类似问题Windows 任务计划程序和可能的权限问题) 和“schedtasks”需要上面提到的整个唯一名称。

作为一名程序员,编写一个模仿 Unix 的“at”的程序应该很容易。但我首先想确保自己不是在重新发明轮子。

答案1

以下是我解决问题的方法。我创建了一个名为 killscreenat.bat 的 .bat 文件,并将其放入 /Windows/system32(但您显然可以将其放在任何地方 - 或者 PATH 中的任何位置)。脚本很简单:

schtasks.exe /create /SC ONCE /TN poweroffmonitor /TR "nircmd monitor off" /ST %1 /F

使用方法很简单:

killscreenat HH:MM

关键是 /F 选项(严重未记录/错误记录)。虽然 Technet 的文档(或我读过的任何其他地方)中没有提到,但它会强制计划任务覆盖已存在的任务。

这不是一个全局的解决方案 - 这意味着你不能仅仅“向”它“传送”任何命令,但如果你的“任务”像我的一样频繁,那么这个过程就足够简单了。

感谢大家的回答,它们对于找到最终的解决方案确实很有帮助!

答案2

你有没有尝试过赛格威Windows 中的 bash shell?

答案3

Windows 中的 at 命令有各种标志,可让您设置重复和交互式任务,只需执行 at --help 即可查看完整列表。在我看来,您似乎想要结合使用 /every: 和 /interactive,但我不确定您到底想要实现什么。

答案4

好吧,我用的是那个愚蠢的方法:

:label1
if "%time%" GTR "15:00:00,00" do (
将你的命令放在这里
goto label2
)
goto label1
:label2

相关内容