【问题标题】:Is it possible to issue a wait command in a batch file?是否可以在批处理文件中发出等待命令?
【发布时间】:2011-03-24 13:30:46
【问题描述】:

我有一个运行多个 .cmd 文件的批处理文件。我想知道在运行最后一个之前是否可以让它等待 60 秒左右。

谢谢

【问题讨论】:

标签: c# iis-7 batch-file cmd


【解决方案1】:

您可以使用timeout [seconds],即timeout 60

【讨论】:

  • 它只是一直说超时无法识别超时/t 40
  • 您使用的是什么操作系统?这在 Win 7 上开箱即用,您可能必须按照其他帖子中针对旧操作系统的建议下载资源工具包
  • 是的,您需要下载资源包才能使用,然后您可以使用睡眠或超时。
【解决方案2】:

另一个“解决方法”是使用choice 命令,该命令在各种 windows/dos OS-es 上得到更好的支持:

choice /c a /t 10 /d a > nul

将导致 10 秒的暂停,而屏幕上什么也看不到。

【讨论】:

    【解决方案3】:

    使用“睡眠”命令。您需要下载它(Windows 资源包的一部分) More information here on sleep

    【讨论】:

      【解决方案4】:

      PING 127.0.0.1 -n 61

      它的作用是 ping 计算机本身,它总是会立即回复,ping 之间的时间是 1 秒,并且第一次 ping 会立即进行,所以只需将您想要的秒数 + 1 作为 ping 数添加到发送。在这种情况下,它将等待 60 秒。

      【讨论】:

      • 这适用于所有版本的 windows,一些旧版本(例如 xp)没有特定的超时/睡眠程序
      【解决方案5】:

      您可以使用Timeout

      Syntax
        TIMEOUT [seconds]
      

      Sleep 来自Windows Server 2003 Resource Kit Tools

      Syntax
        SLEEP [seconds]
      

      【讨论】:

        【解决方案6】:

        如果您更喜欢纯 cmd 脚本,请使用以下代码。

        首先,这个 sn-p 以百秒为单位返回当前时间。

        :gettime
        set hh=%time:~0,2%
        set mm=%time:~3,2%
        set ss=%time:~6,2%
        set cc=%time:~-2%
        set /A %1=hh*360000+mm*6000+ss*100+cc
        goto :eof
        

        然后您可以使用它来构建这样的等待循环。

        :wait
        call :gettime wait0
        :w2
        call :gettime wait1
        set /A waitt = wait1-wait0
        if !waitt! lss %1 goto :w2
        goto :eof
        

        最后,将所有部分放在一起,您就有了这个用法示例

        @echo off
        setlocal enableextensions enabledelayedexpansion
        
        call :gettime t1
        echo %t1%
        call :wait %1
        call :gettime t2
        echo %t2%
        set /A tt = (t2-t1)/100
        echo %tt%
        goto :eof
        
        :wait
        call :gettime wait0
        :w2
        call :gettime wait1
        set /A waitt = wait1-wait0
        if !waitt! lss %1 goto :w2
        goto :eof
        
        :gettime 
        set hh=%time:~0,2%
        set mm=%time:~3,2%
        set ss=%time:~6,2%
        set cc=%time:~-2%
        set /A %1=hh*360000+mm*6000+ss*100+cc
        goto :eof
        

        有关此处使用的命令的更详细说明,请查看HELP SETHELP CALL 信息。

        【讨论】:

          【解决方案7】:

          快速谷歌搜索得出了这个答案......

          PING 1.1.1.1 -n 1 -w 30000 >NUL

          它会尝试 ping 直到超时(30000 毫秒)

          【讨论】:

          • 这是导致超时的最迂回方式。
          • 公平地说,我不是批处理脚本专家,我只是在博客上读到这个......“我被告知 windows .bat 文件没有睡眠或等待命令”。看来 TIMEOUT 是一个 Windows 7 命令。
          • 进一步阅读其他答案似乎需要下载,如果它是托管服务器,则可能不可用。你介意不反对我的回答吗?无论您是否认为这是您最喜欢的方法,它都能达到结果。
          • 我个人认为这是一个很好的答案,它解决了我使用的操作系统的问题,无需下载任何资源包
          • 出于好奇,如果机器没有网卡会这样吗?
          【解决方案8】:

          太棒了!所以这是正确的解决方案,最后。 只是一个细节,如果您在本地化操作系统上使用它,请确保您的“DELIMS”设置适合。 例如,使用“DELIMS=:”而不是“DELIMS=:”。用于捷克本地化。

          【讨论】:

            猜你喜欢
            • 2012-05-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-03
            • 2013-01-19
            • 1970-01-01
            • 2017-11-22
            • 1970-01-01
            相关资源
            最近更新 更多