В cmd, когда мы нажимаем Ctrl + C, мы завершаем работу целевого приложения, но если целевое приложение вызывается из пакетного файла, мы получаем это подтверждение «Завершить пакетное задание (Y / N)». Я никогда не могу вспомнить случай, когда я решил не прерывать пакетное задание. Как мы можем пропустить это подтверждение?
windows
command-line
batch
Srikanth
источник
источник
N
. Мне интересно, какой у вас сценарий, где пакетный скрипт завершается после вводаN
.-n
переключатель для пинга cygwin .Ответы:
AFAIK вы не можете, так как это поведение разработано и контролируется интерпретатором команд. Нет способа «отобразить» или даже «перехватить» это, если вы не декомпилируете и не перекомпилируете интерпретатор напрямую.
источник
start
например, sgmoore, предложенного на сайте superuser.com/questions/35698/…, кажется мне прекрасным обходным путем .Нажмите Ctrl+ Cдважды.
источник
Ctrl
и нажмитеC
снова против удараY
затемEnter
.На этом сайте я нашел эффективное решение:
Чтобы не приходилось печатать это каждый раз, я создал второй скрипт, который вызывался
script.cmd
в той же папке, что и строка выше. Я тестировал эту технику только на XP, но другие подтвердили ее на Win 7.Натан добавляет: другой вариант - поместить следующий код в начало файла script.cmd, который делает то же самое в одном файле:
источник
@IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command])
. Вызывает себя рекурсивно, но с аргументом второй раз. Если в вашем скрипте есть аргументы, вы можете использовать первый неиспользуемый позиционный аргумент. Это может быть проблематично, если в вашем скрипте много аргументов. Мой скрипт не нуждался в аргументах или вводе пользователем.Установите Clink и измените настройку terminate_autoanswer. Файл настроек должен быть здесь :
C:\Users\<username>\AppData\Local\clink\settings
.Это тогда "просто работает" с любым окном cmd.exe. Вам не нужно изменять то, что работает или что-то иное, так как кликните копилки на cmd.exe.
Черт возьми, ИМО!
источник
\cmder\config\settings
. См.Если вам не нужно ничего делать в пакетном файле после нормального завершения приложения, то использование
start
команды гарантирует, что пакетный файл уже завершен к тому времени, когда вы нажимаете Ctrl-C. И, следовательно, сообщение не появится.Например:
(Проверено на Windows XP.)
источник
start
, действительно ли это поможет, но это звучит правдоподобно для меня. Так что мне интересно, подразумевает ли понижающий голос, что это НЕ будет работать? Или, может быть, тот, кто отказался от голосования, не знает команду Windowsstart
(или особенноstart /wait
иstart /b
)? См. Microsoft.com/resources/documentation/windows/xp/all/proddocs/… затем. Пожалуйста, объясните отрицательный голос?start
не сработает Всякий раз, когда cmd запускает пакетный файл, нажатие Ctrl + C приведет к завершению текущего запущенного процесса и отображению вопроса.start
команды, принял глупое решение сделать заголовок окна обязательным и необязательным одновременно - довольно запутанным способом. Таким образом, если ваш%my_command%
символ заключен в двойные кавычки, он становится заголовком окна, а первый параметр в%my_params%
становится командой . Чтобы быть в безопасности, используйтеstart "some title here" %my_command% %my_params%
. Большинство просто используют""
и проклинают разработчика за то, что он не использует опцию/TITLE
или/T
вместо того, чтобы установить заголовок.Я боролся с этим желанием на некоторое время избежать приглашения «Завершить пакетную работу».
Мое последнее прозрение - это ловкость рук (или окно консоли), заменив один экземпляр
cmd.exe
другим. Это достигается путем выполнения команды / программы через иstart cmd /k
сразу жеexit
в.BAT
файле.Исходное окно консоли исчезает, а замену можно полностью остановить с помощью Ctrl- C.
Рассмотрим следующий пример,
traceroute
который может быть прерван Ctrl+ Cили разрешен для завершения, возвращая пользователя кC:\>
приглашению:Замена окружения на новый командный интерпретатор может быть не для всех, но, на мой взгляд, выглядит и работает хорошо для меня.
источник
exit /b
для выхода из пакетного сценарияРешение Gringo хорошо, но не работает со скриптами, которые передают список аргументов (т.е.
python myscript.py %*
), такSHIFT
как не обновляется%*
. Есть обходные пути , но у них есть определенные ограничения.Вот модификация, с которой я закончил:
99. (9)% безупречно.
источник
myscript.py
хотите читать со стандартного ввода.Смотрите этот вопрос переполнения стека .
Тем не менее, исправление cmd.exe не то, что я бы сделал для этого.
источник
В моем случае именно файл ping.bat, который находился прямо в моем пользовательском каталоге (C: \ Users \ в Vista или C: \ Documents and Settings \ в XP), неопределенно удерживал пакетное задание.
Этот пакетный файл выполнялся всякий раз, когда я запускал ping из командной строки, где текущим каталогом является мой пользовательский каталог. Пинг из окна «Выполнить» или из каталога другого пользователя работал нормально.
Удалил файл из моего пользовательского каталога, и проблема была решена!
источник
Пуск работает, но теперь окно, открытое командным файлом, изменилось по сравнению с опциями, которые у меня были, и «свойства» отключены (не отвечает).
источник
Просто перенаправьте пакетный стандартный ввод в ноль, добавив <nul в конец команды.
источник
Я столкнулся с этим с EXE-файлом, который, казалось, выдавал ^ C родительскому пакету при выходе, вызывая запрос «Завершить пакетное задание» даже при чистом выходе.
Решением, которое я выбрал, было запускать пакет с «Пуск», аналогично другим ответам, но из приглашения PowerShell (или, если хотите, с помощью метода интерпретатора PowerShell из CMD).
Сейчас 2018 год, и в Windows 10 Microsoft начала вытеснять CMD с PowerShell в качестве предпочтительной командной строки, поэтому по умолчанию она легко доступна в графическом интерфейсе.
Start
это псевдоним для Start-Process .При запуске просто запускается и возвращается. Поэтому, когда вы останавливаете запущенный процесс, подсказка «Завершить пакетное задание» отсутствует.
По умолчанию он не ждет, поэтому никаких дополнительных аргументов помимо команды и ее аргументов не требуется.
Использование
start mything.exe -mythings -arguments
в моей партии работало отлично.В сценариях PowerShell должен быть указан путь к запуску, поэтому я запускаю свой командный файл как
.\host.bat
.источник
TCC / LE , который является бесплатной заменой CMD (воспринимается как CMD ++), имеет возможность подавить запрос на завершение пакетного задания. Вы можете найти эту опцию в диалоге настройки запуска TCC :
Скриншот:
Если вы никогда раньше не слышали о TCC / LE, вот несколько замечаний с сайта:
Я использовал TCC / LE в течение многих лет и 4NT до этого. Я очень люблю это и могу рекомендовать это. Единственная причина, по которой я до сих пор не использую его, заключается в том, что я почти исключительно использую PowerShell сейчас.
источник
Основная причина подавления «Завершения пакетного задания (Y / N)» - запуск программы в цикле (например, повторный запуск в случае сбоя).
Это https://stackoverflow.com/a/8185270/1170023 помогло привести к этому решению:
источник
Самый простой способ подавить подтверждение, если вы используете Hyper- терминал, это добавить плагин Hyper- Yes.
источник
В конце вашего сценария просто добавьте следующую команду:
echo
Это не «повредит» поведению вашего сценария, и, кажется, мешает CDM спросить, хотите ли вы прекратить пакет.
источник