【问题标题】:sleep function in a batch script批处理脚本中的睡眠功能
【发布时间】:2016-12-20 12:36:46
【问题描述】:

我正在创建一个批处理文件以在我的桌面xyz.exe 上运行一个程序 4 小时,然后将其关闭 1 小时并重复该过程。这是我的脚本。

:a
START C:\Users\Mukul\Desktop\xyz.exe
SLEEP 14400
taskkill /F /IM xyz.exe
SLEEP 3600
goto :a

根据here,脚本应该等待。它还说:

SLEEP 10

会将下一个命令的执行延迟 10 秒。所以SLEEP 14400 应该延迟执行 4 小时。

当前结果: 下一个命令会在第一个命令完成后立即执行。

期望的结果: 下一条命令需要等待 4 个小时才能执行上一条命令。

【问题讨论】:

  • 你也可以这样做:powershell sleep 14400
  • Windows batch: sleep的可能重复
  • 对于截至 2020 年 9 月 21 日的 Windows 10 专业版,无法识别睡眠,但可以识别超时。超时参数以秒为单位。例如 Timeout /t 10
    无限期地等待直到按键按下:timeout /t -1。
    详情见超时/?在命令提示符中

标签: batch-file wait sleep


【解决方案1】:

您也可以使用timeout

这是一个例子:

@echo off
echo Hi
timeout /t 1 /nobreak > nul
  • /t 不是强制性的

  • 1 是等待的秒数

  • /nobreak 确保用户不能跳过等待

  • > nul 将输出重定向到无,因此您什么也看不到

【讨论】:

    【解决方案2】:

    首先:Bash 和 Batch 是非常不同的语言。
    现在,答案。
    我更喜欢ping 命令而不是sleep 命令,因为它可以轻松地在秒和毫秒之间切换:

    ping -n 11 127.0.0.1>nul
    

    该命令暂停 10 秒然后恢复。
    或者:

    ping 1.1.1.1 -n 1 -w 10001 >nul
    

    这也会暂停 10 秒,但以毫秒为单位。

    都可以改编成:

    :a
    start C:\Users\Mukul\Desktop\xyz.exe
    ping -n 14401 127.0.0.1>nul
    taskkill /F /IM xyz.exe
    ping -n 3601 127.0.0.1>nul
    goto a
    

    免责声明:我没有尝试过最后一段代码(因为我没有额外的 4 个小时来做​​某事)。

    【讨论】:

    • 1.1.1.1 实际上会去某个地方 >> 1.1.1.1 (1.0.0.1)
    • 不,不,不。即使这是 Microsoft Windows 世界,即使它有时有效,也不是所有东西都有意义,但这仍然是信息技术,让某人等待几秒钟不能成为答案。此外,为什么要 ping 私有主机(1.1.1.1 是 Cloudflare)而不是 localhost?投反对票。
    【解决方案3】:

    您的 Windows 版本可能不支持 SLEEP 命令。试试这个:

    :a
    START C:\Users\Mukul\Desktop\xyz.exe
    TIMEOUT 14400
    taskkill /F /IM xyz.exe
    TIMEOUT 3600
    goto :a
    

    【讨论】:

    • 从什么时候开始不支持?我使用的是 Windows 10。感谢您的回答
    • 不确定是什么时候,但可能是因为他们开始允许 Windows 键+睡眠用于“电源和睡眠设置”,可以控制 Windows 进入睡眠之前的时间
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 2011-12-18
    • 1970-01-01
    • 2011-02-03
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多