【问题标题】:batch script, put to sleep until certain time批处理脚本,休眠到特定时间
【发布时间】:2023-04-03 11:47:01
【问题描述】:

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

我的脚本只是一个命令

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

我一直在摔断脖子,似乎无法找到一种方法让程序进入睡眠状态,直到一天中的某个时间才用完 CPU。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    下面的批处理文件在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
    

    【讨论】:

      【解决方案2】:

      正确的方法可能是设置cron 任务,或者如果您使用的是 Windows 并且无权访问cron,例如通过CygWin,然后使用task scheduler

      【讨论】:

        【解决方案3】:

        使用操作系统内置的调度。 Linux下是cron,windows下搜索Scheduler。这将允许您按照您喜欢的任何时间表运行任意脚本。

        【讨论】:

        • 在 Windows 中,调度程序是通过 AT 命令访问的。但是,它只允许在特定的日期和时间安排任务(它不允许在任何时间间隔重复任务),因此需要在 0、6、12 和 18 小时内执行四次 AT 并包含在每次执行中所有月份的天数(从 1 到 31),然后每个月重复此过程。此外,它还需要运行 Windows 计划服务。
        • @Aacini - 感谢您列出命令。我只熟悉用于配置调度程序的 GUI。我不确定我使用的是什么版本的 Windows,但我很确定我可以安排脚本在一天中执行多次,以及许多其他选项。有可能,在幕后,一切都和你描述的一样,但我不知道。另外,关于必须运行的服务的好处。它确实需要,但作为一项服务,它不会使用太多的资源。
        • 为什么在尝试调度程序之前不尝试我的批处理解决方案?为此,您只需要复制批处理文件并键入开始命令!此外,如果您稍后使用调度程序,这将是一个很好的比较点。您确定调度程序会比批处理解决方案表现更好吗?这个问题的答案是普遍感兴趣的! ;-)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-03
        • 2014-10-07
        • 2011-07-23
        • 2018-09-29
        相关资源
        最近更新 更多