【问题标题】:batch file that opens a program waits 5 seconds then closes that program打开程序的批处理文件等待 5 秒然后关闭该程序
【发布时间】:2014-03-29 13:58:47
【问题描述】:

由于某种原因,我无法让这批执行打开部分,等待,然后是 Windows XP 或 Windows 7 中的关闭部分。我只能通过注释掉批处理中的另一个来打开或关闭,但由于某种原因如何我已经写了它只会打开。如何打开一个程序等待固定时间,然后关闭同一个程序?这样做的原因是在计算机启动时强制使用制造商程序的驱动程序。任何帮助将非常感激。谢谢。

@ECHO off
"C:\Program Files\WinTV\WinTV2K.EXE" -nc
Set _Delay=5
Taskkill /IM "WinTV2K.EXE" /F
Exit

【问题讨论】:

  • 试试TIMEOUT /T 5而不是Set _Delay=5
  • 我尝试使用 TIMEOUT 而不是 Set _Delay,我得到:“'TIMEOUT' 不是内部或外部命令、可运行程序或批处理文件。”

标签: windows batch-file


【解决方案1】:

代替

Set _Delay=5

使用这个

ping -n 6 localhost >nul

ping 命令需要 6 才能给您大约 5 秒的延迟。

【讨论】:

    【解决方案2】:

    感谢大家对等待 ping 的帮助,这对计时器来说是一个很好的修复,但是我可以让批处理工作的唯一方法是将批处理文件放在程序目录中并像这样运行它:

    @ECHO off
    start WinTV2K.EXE -nc
    ping 1.1.1.1 -n 1 -w 5000 > nul
    Taskkill /IM WinTV2K.EXE /F
    Exit
    

    不知道为什么它不能以另一种方式工作,这不是我想要的,但它会做。感谢你的帮助。 @Ryan 和 @Sean Long

    【讨论】:

    • 是否在没有使用 start 调用的情况下在新窗口中打开程序?如果不是,那么批处理必须等待程序完成才能继续执行任何新任务。
    • 它正在打开一个cmd窗口,但在手动关闭“”中调用的程序之前不会运行下一行。
    【解决方案3】:

    您可以参考this 了解更多信息,但我最喜欢的是ping 不存在的机器一段时间:

    ping 192.0.2.2 -n 1 -w 10000 > nul
    

    根据需要更改 10000(以毫秒为单位)。

    【讨论】:

      【解决方案4】:

      不要使用Set _Delay=5,而是使用以下内容:

      ping 1.1.1.1 -n 1 -w 5000 > nul

      将 ping 1.1.1.1 一次 (-n 1) 并等待 5 秒以等待响应 (-w 5000)

      由于该值被输出到nul,除了等待5秒外,它不会影响您的程序。

      【讨论】:

      • 由于某种原因,直到我手动关闭程序但保持批处理 cmd 提示窗口打开,ping 才开始,然后 ping 开始。所以就好像打开程序命令后卡住了一样。
      • 在“C:\Program Files\WinTV\WinTV2K.EXE”-nc 行关闭或停止之前,它不会继续到下一个命令行。我尝试打开程序的手动实例并重新运行批处理,然后手动关闭“批处理打开的程序”,它关闭了手动运行的程序,正如我所怀疑的那样。
      【解决方案5】:

      这将打开您的程序等待 5 秒,然后关闭同一个程序 Windows XP 超时 - 10“批处理文件”或“Windows 命令脚本”!没有ping!!!

      @ECHO off
      start WinTV2K.EXE -nc
      ver | find "XP" > nul
           if %ERRORLEVEL% == 1 timeout /t 05 && echo . Vista - 10 && goto NEXT
      
      set XP-timeout=5000
      echo . XP, 1000 = 1 sec, approximately
      
      set /a timeout=1
           :timer
      echo timeout timer number %timeout%
      if %timeout% == %XP-timeout% goto NEXT
      echo . XP, 1000 = 1 sec.
      set /a timeout=timeout+1
      goto timer
           :NEXT
      tasklist /fi "imagename eq WinTV2K.EXE" |find ":" > nul
       if errorlevel 1 taskkill /f /im "WinTV2K.EXE"
      Exit
      

      【讨论】:

        猜你喜欢
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 2023-01-12
        • 2015-02-12
        • 1970-01-01
        相关资源
        最近更新 更多