Нажмите Ctrl+ Cдважды.
Как подавить подтверждение «Прервать пакетное задание (Y / N)»?
В cmd, когда мы нажимаем Ctrl + C, мы завершаем работу целевого приложения, но если целевое приложение вызывается из пакетного файла, мы получаем это подтверждение «Завершить пакетное задание (Y / N)». Я никогда не могу вспомнить случай, когда я решил не прерывать пакетное задание. Как мы можем пропустить это подтверждение?
16 ответов на вопрос
- Популярные
- Новые
- С комментариями
- Активные
AFAIK вы не можете, так как это поведение разработано и контролируется интерпретатором команд. Нет способа «отобразить» или даже «перехватить» это, если вы не декомпилируете и не перекомпилируете интерпретатор напрямую.
At this site, I found an effective solution:
script2.cmd < nul
To not have to type this out every time I made a second script called script.cmd
in the same folder with the line above. I've tested this technique on XP only, but others have confirmed it on Win 7.
Nathan adds: another option is to put the following code at the top of script.cmd which does the same thing in one file:
rem Bypass "Terminate Batch Job" prompt. if "%~1"=="-FIXED_CTRL_C" ( REM Remove the -FIXED_CTRL_C parameter SHIFT ) ELSE ( REM Run the batch with <NUL and -FIXED_CTRL_C CALL <NUL %0 -FIXED_CTRL_C %* GOTO :EOF )
Install Clink and change the "terminate_autoanswer" setting. The settings file should be here: C:\Users\<username>\AppData\Local\clink\settings
.
# name: Auto-answer terminate prompt # type: enum # Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 = # disabled, 1 = answer 'Y', 2 = answer 'N'. terminate_autoanswer = 1
This then "just works" with any cmd.exe window. You don't need to alter what's running or otherwise, since clink piggy-backs on cmd.exe.
Frickin' awesome, IMO!
Если вам не нужно ничего делать в пакетном файле после того, как ваше приложение завершится нормально, то использование start
команды гарантирует, что пакетный файл уже завершен к тому времени, когда вы нажимаете Ctrl-C. И, следовательно, сообщение не появится.
Например:
@ эхо выключено set my_command = ping.exe установить my_params = -t www.google.com Команда echo, которая будет выполнена командой start:% my_command%% my_params% :: Если НЕ использовать / B или / WAIT, то это создаст новое окно, а :: выполнение этого самого пакетного файла будет продолжено в текущем окне: start% my_command%% my_params% эхо. echo Эта строка будет выполнена ДО того, как 'start' будет даже закончен. Итак, это Пакетный файл echo будет завершен ДО того, как вы нажмете Ctrl-C в другом окне. эхо. :: Просто для тестирования используйте «пауза», чтобы показать «Нажмите любую клавишу, чтобы продолжить», чтобы увидеть :: вывод команд 'echo'. Обязательно нажмите Ctrl-C в окне :: который запускает команду ping (не в этом самом окне). Или просто удалите :: следующая строка в замешательстве: Пауза
(Проверено на Windows XP.)
Я боролся с этим желанием на некоторое время избежать приглашения «Завершить пакетную работу».
Мое последнее прозрение - это ловкость рук (или окно консоли), заменив один экземпляр cmd.exe
другим. Это достигается путем выполнения команды / программы через и start cmd /k
сразу же exit
в .BAT
файле.
Исходное окно консоли исчезает, а замену можно полностью остановить с помощью Ctrl- C.
Рассмотрим следующий пример, traceroute
который может быть прерван Ctrl+ Cили разрешен для завершения, возвращая пользователя к C:\>
приглашению:
@echo off set timeout=100 if not "%2"=="" set timeout=%2 start cmd /k tracert -w %timeout% %1 exit
Замена окружения на новый командный интерпретатор может быть не для всех, но, на мой взгляд, выглядит и работает хорошо для меня.
Gringo's solution is good, but doesn't work well with scripts which pass along the argument list (i.e. python myscript.py %*
), since SHIFT
doesn't update %*
. There are workarounds, but they have certain limitations.
Here's the modification I ended up with:
IF [%JUSTTERMINATE%] == [OKAY] ( SET JUSTTERMINATE= python myscript.py %* ) ELSE ( SET JUSTTERMINATE=OKAY CALL %0 %* <NUL )
99.(9)% flawless.
Смотрите этот вопрос переполнения стека .
Тем не менее, исправление cmd.exe не то, что я бы сделал для этого.
В моем случае именно файл ping.bat, который находился прямо в моем пользовательском каталоге (C: \ Users \ в Vista или C: \ Documents and Settings \ в XP), неопределенно удерживал пакетное задание.
Этот пакетный файл выполнялся всякий раз, когда я запускал ping из командной строки, где текущим каталогом является мой пользовательский каталог. Пинг из окна «Выполнить» или из каталога другого пользователя работал нормально.
Удалил файл из моего пользовательского каталога, и проблема была решена!
Пуск работает, но теперь окно, открытое командным файлом, изменилось по сравнению с опциями, которые у меня были, и «свойства» отключены (не отвечает).
Похожие вопросы
-
12
Почему папка / winsxs становится такой большой и ее можно уменьшить?
-
2
Повышенные привилегии для запуска приложений в Windows?
-
14
PDF Viewer в Windows
-
-
7
Какие службы Windows можно безопасно отключить?
-
8
Firefox PDF плагин для просмотра PDF в браузере на Windows
-
1
Windows теряет макет экрана
-
1
Есть ли способ предотвратить установку / обновление, чтобы засорять мой жесткий диск загадочными пап...
-
1
Как я могу получить доступ к принтеру Windows Vista из Ubuntu по сети?
-
6
Просмотр журнала в Windows
-
3
Фоновая проблема Windows с двумя экранами