Пакетная обработка - как сохранить статус программы в переменной? - PullRequest
1 голос
/ 13 июля 2020

По сути, я хочу написать сценарий, который может помочь перезапустить программу, если она станет «не отвечает». Затем я хочу записать это в простой текстовый файл со временем, чтобы я мог позже проверить, как часто необходимо перезапускать, но как мне правильно проверить статус и сохранить его в переменной, чтобы сценарий затем решил, перезапускать ли или игнорировать его (иначе он либо не работает, либо работает нормально)?

Я обнаружил, что могу сделать что-то вроде .....

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

, которое я получил от Пакетный файл для уничтожения и перезапуска не отвечающей программы

Это здорово, но когда я добавляю что-то для записи в журнал, я обнаруживаю, что он все равно записывает в журнал. чем только при статусе «не отвечает». Кроме того, он не дает мне большой гибкости для обработки его в операторе 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"

(я догадывался, что && не является условием успешного выполнения предыдущего оператора в цепочке, но все равно выполняется независимо?)

1 Ответ

0 голосов
/ 13 июля 2020

&& условно. Проблема в том, что вы устанавливаете переменную и пытаетесь получить к ней прямой доступ. так что либо сделайте 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"
)
...