批处理 - 如何将程序的状态存储在变量中?

Batch - how do I store the status of a program in a variable?

我基本上想编写一个脚本,可以帮助程序在变为 'not responding' 时自行重启。然后我想用时间将它记录到一个简单的文本文件中,这样我可以稍后检查它需要重新启动的频率,但是我如何正确检查状态并将其存储在脚本的变量中,然后决定是否重新启动它或忽略它(否则它不是 运行 或 运行 好)?

我发现我可以做类似的事情......

taskkill /im "myProgram.exe" /fi "STATUS eq NOT RESPONDING" /f >nul && start "" "C:\Program Files (x86)\myProgram\myProgram.exe"

我从 Batch file to kill and restart not responding program

得到的

这很棒,让我走到了那里,但是当我追加一些东西要写入日志时,我发现它似乎无论如何都会写入日志,而不是仅在状态为 'not responding' 时才写入日志。如果我想用它做其他事情,它也没有给我很大的灵活性来在 if/else 语句中处理它。

这是我用附加位尝试的....

taskkill /im "myProgram.exe" /fi "STATUS eq NOT RESPONDING" /f >nul && SET message=%time% %date% - myProgram is was not running so restarted it && ECHO %message% >> myProgram_restart_LOG.txt && START "" "C:\Program Files (x86)\myProgram\myProgram.exe"

(我猜 && 不是以链中的前一条语句成功为条件,而是无论如何都会执行?)

&& 是有条件的。问题是您正在设置一个变量并试图直接访问它。所以要么 call echo 访问变量:

taskkill /im "myProgram.exe" /fi "STATUS eq NOT RESPONDING" /f >nul && SET message=%time% %date% - myProgram is was not running so restarted it && call ECHO %message% >> myProgram_restart_LOG.txt & START "" "C:\Program Files (x86)\myProgram\myProgram.exe"

或者,直接将消息回显到日志文件。

taskkill /im "myProgram.exe" /fi "STATUS eq NOT RESPONDING" /f >nul && SET echo %time% %date% - myProgram is was not running so restarted it >> myProgram_restart_LOG.txt & START "" "C:\Program Files (x86)\myProgram\myProgram.exe"

但我不确定你为什么要在批处理文件中链接,所以我会这样做:

taskkill /im "myProgram.exe" /fi "STATUS eq NOT RESPONDING" /f >nul
if errorlevel 0 (
    echo %time% %date% - myProgram is was not running so restarted it>> myProgram_restart_LOG.txt
    START "" "C:\Program Files (x86)\myProgram\myProgram.exe"
)