【问题标题】:Need a batch file to start, delay a close, and restart another batch file.需要一个批处理文件来启动、延迟关闭并重新启动另一个批处理文件。
【发布时间】:2016-09-07 01:10:52
【问题描述】:

我已经搜索和搜索,这是我找到的最接近的代码:

@echo off
:loop
C:\CryptoCurrency\nexus_cpuminer\start.bat
timeout /t 30 >null
taskkill /f /im nexus_cpuminer.exe >nul
goto loop

有几件事:注意 start.bat。我需要启动的 .exe 必须通过 .bat 文件启动,因为 .bat 文件包含 .exe 所需的信息。

其次,.exe 会启动一个 CMD 提示窗口,它会告诉我发生了什么。 (请记住这一点,因为这不是您的正常 .exe,我希望 CMD 提示窗口在它被 KILLED 时关闭)

我知道我已将其设置为 30 秒。我现在只是在测试。我想在调用 kill 命令之前将其设置为 4 小时。另外,我想在整个过程开始之前设置一个 30 秒的“延迟”。我正在运行 Windows 7 x 64。

【问题讨论】:

  • 还有什么问题?你的代码到底有哪些你不想做的事情(反之亦然)?
  • 请注意:1. 您永远不应该为 .bat 文件指定与命令相同的名称。 start 是一个内部 cmd.exe 命令。 2.start.bat 结尾的行意味着将控制权转移到这样的文件中永远不会返回!如果要在该 .bat 文件结束后返回该 .bat 文件,则必须使用call ..\start.bat 命令。 但是我不知道在start是内部命令名称的情况下会发生什么(首先更改此类文件的名称)。
  • 3. 你遇到了死锁:控件将返回到这个 .bat 文件直到start.bat 文件结束;这意味着无法在nexus_cpuminer.exe 运行的同时执行taskkill 命令。要解决此问题,您必须使用内部start 命令以并行启动第二个 .bat 文件,然后继续此 .bat 文件的其余部分。

标签: windows batch-file cmd


【解决方案1】:

您必须将第二个批处理文件的名称更改为其他名称(即starter.bat)并通过start内部命令执行它才能并行执行:

@echo off
:loop
start "" cmd /C "C:\CryptoCurrency\nexus_cpuminer\starter.bat"
timeout /t 30 >null
taskkill /f /im nexus_cpuminer.exe >nul
goto loop

starter.bat文件的最后一行必须是nexus_cpuminer.exe的执行,所以当它被taskkill杀死时,.bat文件立即结束。

另一种更简单的方法是直接在this批处理文件中执行nexus_cpuminer.exe,通过start "" cmd /C nexus_cpuminer.exe命令,这样这个进程就会在自己的cmd.exe窗口中打开。

【讨论】:

    【解决方案2】:

    如果您CALL start.bat,它将返回到您的“调用”脚本。 如果你给 start.bat 一个 TITLE,你可以/FI过滤你的 TASKKILL 命令到 EQ 那个WINDOWTITLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多