批处理脚本,等待特定时间后休眠

3

我的程序存在每6个小时出现一次或两次的问题。所以,我想知道是否有任何方法可以让批处理脚本在后台持续运行,并仅在早上6点、中午12点、下午6点和半夜执行给定的命令。

我的脚本只有一个命令,即

"C:\Program Files\WinSCP\WinSCP.com" /command "open %INPUT%" "get /etc/logs/*" "get /etc/network/interfaces" "bye"

我一直在费劲地尝试,但似乎无法找到让程序睡眠并且在特定时间之前不占用CPU的方法。

3个回答

2
以下批处理文件在6、12、18和0小时执行命令:
@echo off
:waitNextRun
for /F "delims=:" %%h in ("%time%") do set hour=%%h
set /A mod6=hour %% 6
if not %mod6% == 0 goto waitNextRun

"C:\Program Files\WinSCP\WinSCP.com" /command "open %INPUT%" "get /etc/logs/*" "get /etc/network/interfaces" "bye"

:waitNextHour
for /F "delims=:" %%h in ("%time%") do if %hour% == %%h goto waitNextHour
goto waitNextRun

然而,这个批处理文件并不是“在后台”运行的,而是作为普通的批处理文件运行。您可以通过以下命令启动它以最小化其CPU使用:

START "Run WinSCP every six hours" /MIN /LOW theBatchFile

1

正确的方法可能是设置一个 cron 任务,如果您使用的是 Windows 并且没有访问 cron(例如通过 CygWin),则可以使用 任务计划程序


0

使用操作系统内置的调度功能。在Linux下,它是cron,在Windows下,请搜索Scheduler。这将让您按照所需的任意计划运行脚本。


在Windows中,调度程序可以通过AT命令访问。然而,它只允许在特定的日期和时间安排任务(不允许在任何时间间隔重复任务),因此需要执行四次AT命令,分别在0、6、12和18小时时段,并在每次执行中包括所有月份的天数(从1到31),并且每个月都要重复这个过程。此外,需要运行Windows计划服务才能实现。 - Aacini
@Aacini - 感谢您列出了该命令。我只熟悉用GUI配置调度程序。我不确定我使用的是哪个版本的Windows,但我很确定我可以安排脚本在一天内执行多次,以及许多其他选项。可能,在幕后,它最终与您描述的相同,但我不知道。此外,关于服务必须运行的好观点。它确实需要,但作为服务,它不会使用太多资源。 - cdeszaq
为什么不先尝试我的批处理解决方案,而不是尝试调度程序呢?要做到这一点,您只需要复制批处理文件并键入启动命令即可!此外,如果您稍后使用调度程序,这将是一个很好的比较基准。您确定调度程序的表现会比批处理解决方案更好吗?这个问题的答案对大家都很有兴趣!;-) - Aacini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接