Как ответить автоматически (да / нет), когда подскажете? - PullRequest
0 голосов
/ 06 февраля 2019

Мой click.bat файл:

:main
@start /wait cmd.exe -/c ""C:\Users\MY_USER_NAME\Desktop\2.bat" "
goto :main

Мой 2.bat файл:

@echo off
echo Hello World!
@pause

Я нажимаю Click.bat, и они оба открываются (здесь нет проблем).

После этого я закрываю Hello World!подсказка (2.bat).

и подсказка Click.bat, спросите меня ^CTerminate batch job (Y/N)?

Я хочу автоответить здесь (как N) .

(Когда ответ N, 2.bat снова открывается, как я хочу).

First Second Third

1 Ответ

0 голосов
/ 06 февраля 2019

Я согласен с Mofi, что решение реальной проблемы всегда лучше, чем обходить ее, но иногда это невозможно или требуется более быстрое решение.

Вместо пассивного ожидания до второго процессазаканчивается, просто активно смотришь.Если он больше не жив, перезапустите его.Таким образом, не имеет значения, как завершается / завершается / завершается второй процесс:

test1.bat

@echo off
:main
if exist MyCommand.flag goto :eof
start test2.bat
:wait
timeout 1 >nul
tasklist /fi "Windowtitle eq MyCommand"|find "cmd.exe" >nul || @goto :main
goto :wait

test2.bat

@echo off
title MyCommand
echo Hello World!
@pause
break>MyCommand.flag

Вам не нужно start cmd /c, потому что только start уже запускает новый процесс cmd.Присвойте процессу уникальный заголовок, чтобы вы могли проверить, работает ли он по-прежнему.

|| работает так: «если предыдущая команда (find) завершается неудачно, то«
find является необходимой,потому что tasklist не предоставляет полезный уровень ошибки.

Примечание: вам также нужен метод для остановки, когда второй процесс завершает свою задачу.
Test2.bat записывает пустой файл по завершении.Очевидно, что файл не будет создан, когда процесс завершится сбоем раньше (или будет принудительно завершен).
test1.bat просто проверяет наличие файла перед перезапуском второго процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...