Завершить выполнение пакетного файла y да n нет как вызвать

Обновлено: 06.07.2024

В cmd, когда мы нажимаем Ctrl+C, мы завершаем работу целевого приложения, но если целевое приложение вызывается из пакетного файла, мы получаем это подтверждение «Завершить пакетное задание (Y/N)». Я никогда не могу вспомнить случай, когда я решил не прерывать пакетное задание. Как мы можем пропустить это подтверждение?

Нажмите Ctrl + C дважды.

AFAIK вы не можете, так как это поведение разработано и контролируется интерпретатором команд. Нет способа "отобразить" или даже "перехватить" это, если вы не декомпилируете и не перекомпилируете интерпретатор напрямую.

На этом сайте я нашел эффективное решение:

Чтобы не приходилось печатать это каждый раз, я сделал второй скрипт с именем script.cmd в той же папке, что и строка выше. Я тестировал эту технику только на XP, но другие подтвердили это на Win 7.

Натан добавляет: другой вариант - поместить следующий код в начало файла script.cmd, который делает то же самое в одном файле:

Это тогда "просто работает" с любым окном cmd.exe. Вам не нужно изменять то, что работает или иным образом, так как кликните на pigd-backs на cmd.exe.

Черт возьми, ИМО!

(Проверено на Windows XP.)

Я боролся с этим желанием на некоторое время избежать приглашения "Завершить пакетную работу".

Мое последнее прозрение - это ловкость рук (или окно консоли), заменив один экземпляр cmd.exe другим. Это достигается путем выполнения команды / программы с помощью start cmd /k сразу за exit .BAT файл.

Исходное окно консоли исчезает, а замену можно полностью остановить с помощью Ctrl - C.

Рассмотрим следующий пример traceroute которая может быть прервана с помощью Ctrl + C или разрешена для завершения, возвращая пользователя в приглашение C:\> :

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

Решение Gringo хорошо, но не работает со скриптами, которые передают список аргументов (например, python myscript.py %* ), так как SHIFT не обновляет %* . Есть обходные пути, но у них есть определенные ограничения.

Вот модификация, с которой я закончил:

Тем не менее, исправление cmd.exe не то, что я бы сделал для этого.

Пуск работает, но теперь окно, открытое командным файлом, изменилось по сравнению с опциями, которые у меня были, и "свойства" отключены (не отвечает).

Я столкнулся с этим с EXE-файлом, который, казалось, выдавал ^ C родительскому пакету при выходе, вызывая приглашение "Завершить пакетное задание" даже при чистом выходе.

Решением, которое я выбрал, было запускать пакет с "Пуск", аналогично другим ответам, но из приглашения PowerShell (или, если хотите, с помощью метода интерпретатора PowerShell из CMD).

Сейчас 2018 год, и в Windows 10 Microsoft начала вытеснять CMD с PowerShell в качестве предпочтительной командной строки, поэтому по умолчанию она легко доступна в графическом интерфейсе.

Start - это псевдоним для Start-Process.

При запуске просто запускается и возвращается. Поэтому, когда вы останавливаете запущенный процесс, подсказка "Завершить пакетное задание" отсутствует.

По умолчанию он не ждет, поэтому никаких дополнительных аргументов помимо команды и ее аргументов не требуется.

Использование start mything.exe -mythings -arguments в моей партии работало отлично.

В сценариях PowerShell должен быть указан путь к запуску, поэтому я запускаю свой командный файл как .\host.bat .

Основная причина подавления «Завершения пакетного задания (Y/N)» - запуск программы в цикле (например, повторный запуск в случае сбоя).

Просто перенаправьте пакетный стандартный ввод в нуль, добавив <nul в конец команды.

В моем случае именно файл ping.bat, который находился прямо в моем пользовательском каталоге (C:\Users\ в Vista или C:\ Documents and Settings\ в XP), неопределенно удерживал пакетное задание.

Этот пакетный файл выполнялся всякий раз, когда я запускал ping из командной строки, где текущим каталогом является мой пользовательский каталог. Пинг из окна «Выполнить» или из каталога другого пользователя работал нормально.

Удалил файл из моего пользовательского каталога, и проблема была решена!

TCC/LE, который является бесплатной заменой CMD (воспринимается как CMD++), имеет возможность подавить запрос на завершение пакетного задания. Вы можете найти эту опцию в диалоге настройки запуска TCC:

Варианты TCC/LE

Если вы никогда раньше не слышали о TCC/LE, вот несколько замечаний с сайта:

Я использовал TCC/LE в течение многих лет и 4NT до этого. Я очень люблю это и могу рекомендовать это. Единственная причина, по которой я до сих пор не использую его, заключается в том, что сейчас я почти исключительно использую PowerShell.


Как закрыть окно "ветвистого" батника по завершении его выполнения?
Батник имеется с вызволением команд и вызовом/запуском других батников. В результате окно первого.

Какое научное исследование можно "внедрить" в простой клиент-сервер
Добрый день! Пишу сюда потому что не знаю где еще это можно делать на этом форуме. Добрые.

Как в Word 2010 аккорду "Ctrl ё" присвоить действие кнопки "формат по абзацу"
Скажите, плиз. как в Word 2010 аккорду &quot;Ctrl+ё&quot; присвоить действие кнопки &quot;Формат по абзацу&quot;.

А смысл это делать сразу без ожидания? Логично прописать ключ --time-limit=<SECONDS> после screenrecord . забыл дописать
во втором варианте, чтобы можно было после запуска файла "ctrl+C.exe", выполнять следующие команды, а этому мешает выскакивающий запрос: "Завершить выполнение пакетного файла [Y(да)/N(нет)]?"
надо делать так (к примеру создать папку):
(если открыть echo on , то можно увидеть что запрос не исчез, а сместился в конец bat, но теперь это уже не мешает выполнению команд после ctrl+C)

alpap, FlasherX, Вы наверное не совсем правильно поняли меня, я имел ввиду:

1) Запустил батник и автоматом началась запись с экрана телефона.

Далее когда уже все записали:

2) Нажимаем "Ctrl+C", и автоматом запись останавливаться,
копируется запись с телефона на комп,
удаляется запись с телефона,
убиваем процесс adb.exe командой "adb kill-server"

Мне не нужно выставлять запись по времени))

Добавлено через 11 минут
Сочетание "Ctrl+C" это родная комбинация для остановки записи, и я имел виду можно ли как то сделать подмену "Ctrl+C" на нажатие клавиши пробела (а по факту чтобы срабатывала команда "Ctrl+C")

Завершить выполнение пакетного файла [У(да)/ N (нет)]?

Если была нажата клавиша Y (подтверждение), пакетная программа будет закончена и управление вернется операционной системе. По этой причине команда pause может быть вставлена перед разделом пакетного файла, который потребуется пропустить. Команда pause приостанавливает выполнение пакетной программы, аналогичное действие можно сделать, нажав комбинацию клавиш CTRL+C и Y.

Пример. Для создания пакетной программы запроса пользователю о необходимости заменить диск в одном из дисководов, введите:

echo Please put a new disk into drive A

В этом примере все файлы с диска А копируются в текущий каталог. После этого на экран выводится запрос вставить другой диск в дисковод А, затем команда pause приостанавливает работу программы, чтобы пользователь мог сменить диск и нажать любую клавишу для продолжения процесса. Данная пакетная программа работает как бесконечный цикл. Команда goto BEGIN возвращает управление на начало командного файла. Для завершения работы этой пакетной программы требуется нажать комбинацию CTRL+C и Y.

8. rem – добавляет комментарии в пакетные файлы или файлы настройки.

rem [текст]

текст – задает строку символов, используемую в качестве комментария.

/? – отображение справки в командной строке.

Примечания.

1. Вывод комментариев с помощью команды echo . Команда rem не выводит комментарии на экран. Для вывода комментариев на экран необходимо использовать команду echo on в пакетных файлах или в файле Config.nt.

2. Ограничения на комментарии в пакетных файлах. В тексте комментариев нельзя использовать символы перенаправления (< или >) или канала (|).

3. Использование команды rem для добавления вертикальных пробелов. Вместо команды rem , которая без текста комментария применяется для добавления вертикальных пробелов в пакетный файл, можно просто использовать пустые строки. При обработке пакетной программы пустые строки пропускаются.

Пример. Следующий пример показывает применение комментариев и вертикальных пробелов в пакетном файле.

rem Эта пакетная программа форматирует и проверяет новые диски.

rem Она называется CHECKNEW.BAT.

echo Вставьте новый диск в дисковод В.

9. setlocal – начало области задания для определения переменных среды в пакетном файле. Локальное окружение используется до тех пор, пока не встретится команда endlocal или не будет достигнут конец пакетного файла.

Синтаксис :

enableextension – включает расширения командного процессора до появления соответствующей команды endlocal , вне зависимости от состояния расширений командного процессора перед командой setlocal ;

disableextensions – выключает расширения командного процессора до появления соответствующей команды endlocal , вне зависимости от состояния расширений командного процессора перед командой setlocal ;

enabledelayedexpansion – включает расширения переменной среды с задержкой до появления соответствующей команды endlocal , вне зависимости от состояния расширений командного процессора перед командой setlocal ;

disabledelayedexpansion – выключает расширения переменных среды с задержкой до появления соответствующей команды endlocal , вне зависимости от состояния расширений командного процессора перед командой setlocal ;

/? – вывод справки в командной строке.

Примечания.

1. Использование команды setlocal . Команда setlocal не выполняется при использовании вне сценария или пакетного файла.

2. Изменение переменных среды. Используйте команду setlocal для изменения переменных среды при выполнении пакетного файла. Изменения среды, выполненные после setlocal, являются локальными для пакетного файла. Cmd.exe восстанавливает первоначальные параметры при обнаружении команды endlocal или достижении конца пакетного файла.

3. Допускается использование нескольких команд setlocal и endlocal в пакетной программе (так называемых, вложенных команд).

4. Проверка расширений командного процессора в пакетных файлах. Команда setlocal устанавливает переменную ERRORLEVEL. При выполнении аргументов < enableextension | disableextensions > или < enabledelayedexpansion | disabledelayedexpansion > переменная ERRORLEVEL имеет значение 0. В противном случае ее значение – 1. Этим можно воспользоваться в пакетных программах для проверки доступности расширений командного процессора, например:

verify other 2>nul

if errorlevel 1 echo Включение расширений командного процессора невозможно

Так как команда cmd не устанавливает значение переменной ERRORLEVEL, когда расширения командного процессора отключены, команда verify устанавливает переменную ERRORLEVEL в ненулевое значение при использовании этой команды с недопустимым аргументом. Если используется команда setlocal с аргументами или и значение переменной ERRORLEVEL не 1, расширения командного процессора недоступны.

10. shift – изменяет положения пакетных параметров в пакетных файлах.

Shift

Примечания.

1. Использование параметра командной строки shift с расширениями командного процессора. Если расширения командного процессора разрешены (используются по умолчанию), команда shift поддерживает ключ / n, который указывает команде начинать сдвиг с л-го аргумента, где п-число от нуля до восьми. Например: shift /2 сдвинет %3 на %2, %4 на %3 и т. д. %0 и %1 останутся неизменными.

2. Работа команды shift. Команда shift изменяет значения замещаемых параметров %0 %9 путем копирования каждого параметра в предыдущий. Другими словами, значение %1 копируется в %0, значение %2 – в %1и т. Д. Такой прием оказывается полезным при написании пакетных файлов, выполняющих одну и ту же операцию над любым числом параметров.

3. Работа более чем с 10 пакетными параметрами. Команда shift также может быть использована для создания пакетных программ, воспринимающих более 10 параметров. В командной строке такой программы можно задать более 10-ти параметров, при этом все параметры, следующие за десятым (то есть за переменной %9) будут последовательно помещены в эту переменную %9.

4. Использование %* с командой shift . Команда shift не влияет на пакетный параметр %*.

5. Смещение параметров в обратном направлении. Команды, выполняющей обратный сдвиг не существует. После сдвига параметров командой shift начальное значение первого параметра (%0) не может быть восстановлено.

Пример. В следующем пакетном файле Mycopy.bat показано, как использовать команду shift с произвольным числом пакетных параметров. Файл копирует набор файлов в заданный каталог. Пакетные параметры представлены аргументами имени файла и каталога.

rem MYCOPY.BAT копирует произвольное число файлов

rem Используется следующий синтаксис:

rem mycopy dir файл1 файл2 .

echo Работа закончена

Порядок выполнения работы

Изучение материалов по рассматриваемой теме рекомендуется проводить в следующей последовательности.

1. Изучение справочной системы командной строки, и ее возможностей.

2. Изучение и апробация команд для работы с файлами и папками.

3. Изучение и апробация внутренних команд.

4. Изучение и апробация команд пакетных файлов.

5. Выполнение представленных комбинированных заданий.

В ходе выполнения работы студент должен освоить работу в режиме командной строки, изучить основные команды, выполнить практические задания.

Содержание отчета

2. Необходимо выполнить задания 8 – 11 и 23, 24 из подраздела 3.5 «Контрольные вопросы и задания».

3. Выводы по проделанной работе.

Контрольные вопросы и задания

1. Каким образом можно запустить режим командной строки и для каких целей необходим этот режим?

2. Как в режиме командной строки можно получить справку по всем командам, и подробную информацию по конкретной команде?

3. На какие категории делятся команды, какие группы входят в состав системных команд?

4. Для каких целей используется команда attrib?

5. Для каких целей используется команда сору?

6. Для каких целей используется команда del (erase)?

7. Для каких целей используется команда move?

8. (Задача 1) Предположим, что необходимо передать коллеге диск, содержащий файлы из текущего каталога диска С, за исключением файлов с расширением .tmp. Поскольку для копирования файлов с установленным атрибутом «Архивный» может быть использована команда хсору, необходимо установить этот атрибут для всех файлов, подлежащих копированию. Вначале установите атрибут «Архивный» для всех файлов на диске С, а затем снимите этот атрибут для файлов с расширением .tmp. Напишите команду.

9. (Задача 2) Напишите команду для перемещения всех файлов из каталога C:\Work\l в каталог C:\Main\Work Info.

10 (3адача 3) Представьте, что вирус заразил файл svchost.exe. Удаление этого файла из под Windows XP невозможно, т.к. он постоянно используется ОС. Необходимо удалить данный файл в режиме командной строки (файл расположен по адресу C:\WIN_DOUBLE\SYSTEM32) и скопировать дубликат файла расположенный на диске D:\DISTR\WINDOWS\SYSTEM32. Напишите применяемые команды.

11. (Задача 4) Необходимо удалить папку с файлами находящуюся по адресу C:\GLOBAL\DATA.

12. Для каких целей могут быть полезны сценарии (пакетные файлы)?

13. Перечислите десять основных команд для работы с пакетными файлами.

14. Для каких целей используется команда call?

15. Для каких целей используется команда echo?

16. Для каких целей используется команда goto?

17. Для каких целей используется команда pause?

18. Для каких целей используется команда rem?

19. Составьте демонстрационный пакетный файл с комментариями, включающий различные внутренние команды.

20. Составьте демонстрационный пакетный файл с комментариями, включающий различные внешние команды.

21. Составьте демонстрационный пакетный файл с комментариями, включающий различные команды пакетных файлов.

22. Составьте демонстрационный пакетный файл с комментариями, включающий различные команды командного языка.

23. (Задача 5) Составьте пакетный файл для очистки компьютера от временных файлов и файлов, расположенных в корзине, т.е. необходимо удалить содержимое следующих папок: c:\windows\temp; c:\recycled; c:\documents and settings\user\local settings\temp. При этом команды пакетного файла и запрос на удаление файлов, на экран выводиться не должны.

24. (3адача 6) Составьте пакетный файл для запуска утилит обслуживания жесткого диска. Сначала необходимо запустить программу проверки диска на ошибки с их исправлением, командой chkdsk (с необходимыми ключами). Затем необходимо запустить программу дефрагментации диска, командой defrag (с необходимыми ключами), с выводом информации о дефрагментации в файл c:\l.txt. Перед запуском каждой программы необходимо выводить на экран информацию, предупреждающую о том, что будет запущена следующая программа, после чего сценарий должен ждать нажатия пользователем любой клавиши для продолжения, либо Ctrl+C для прерывания его работы.

25. Составьте пакетный файл, обеспечивающий антивирусную защиту сменного носителя информации.

26. Составьте пакетный файл, обеспечивающий антивирусную защиту компьютера (периодическое обновление антивирусных баз и сканирование памяти и разделов дисков.

Команда Timeout используется в командных файлах для организации режима ожидания фиксированного интервала времени в секундах, либо интервала до нажатия клавиши на клавиатуре.

Формат командной строки:

TIMEOUT [/T] таймаут [/NOBREAK]

Параметры командной строки:

Примечание: значение таймаута, равное -1 задает неограниченное время ожидания до нажатия клавиши.

Время ожидания 10 сек., нажмите любую клавишу для продолжения

Нажатие любой клавиши приведет к прерыванию таймаута и переходу к выполнению следующей команды.

Завершить выполнение пакетного файла [Y(да)/N(нет)]?

Нажмите любую клавишу для продолжения.

Если в данной команде использовать параметр /NOBREAK , то возможен ввод только комбинации CTRL+C

Установка и загрузка ОС Виндовс

Задержка времени (пауза, тайм-аут) в бат-файле

Вот, нашёл в Сети рабочий пример для устройства задержки времени
(пауза, тайм-аут) при выполнении команды в bat-файле:

echo wscript.Sleep 30000>"%temp%sleep30.vbs"
cscript //nologo "%temp%sleep30.vbs"
del "%temp%sleep30.vbs"

Работает в любой ОС Windows, аж бегом

Зачем нужна задержка (пауза, тайм-аут) при выполнении команды в bat-файле?

У всех – по-разному.
Лично мне она (пауза) понадобилась вот для чего:

– Взял простенький bat-файл для очистки временных папок и бросил его в АВТОЗАГРУЗКУ
Прикололся, типа – чтобы этот батничек чистил временные каталоги при запуске системы.
Текст батника вытащил из стандартного Total Commander-a:

cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C:WindowsPrefetch &del *.pf 2>nul &cd/d C:WindowsTemp&rd/s/q c:windows emp 2>nul

Всё-бы ничего, да только такая процедура очистки временных папок при загрузке –
сносит полезные файлы и система выдаёт окно ошибки

Полный текст bat-файла стал теперь таким:

echo wscript.Sleep 30000>"%temp%sleep30.vbs"
cscript //nologo "%temp%sleep30.vbs"
del "%temp%sleep30.vbs"
cmd /c title Очистка временной папки &cd/d %temp%&rd/s/q %temp% 2>nul &cd/d %tmp%&rd/s/q %tmp% 2>nul &cd/d C:WindowsPrefetch &del *.pf 2>nul &cd/d C:WindowsTemp&rd/s/q c:windows emp 2>nul

Прим. Лошади понятно, что изменив цифру 30 на своё значение,
можно получить другие величины паузы в секундах в bat-файле.

Начиная с VISTA, в операционных системах семейства Windows присутствует команда TIMEOUT. Эта команда принимает значение таймаута, равного фиксированному периоду времени ожидания (в секундах) до выполнения команды или ожидание до нажатия клавиши. Имеется также параметр, зaдающий игнорирование нажатий клавиш.

Синтаксис
TIMEOUT [/T] 50 [/NOBREAK]

Параметры

/T 50 Таймаут = 50 сек. Время ожидания в секундах. Допустимый интервал: от -1 до 99999 секунд. Значение, равное -1 задает неограниченное время ожидания до нажатия клавиши. /NOBREAK Игнорировать нажатия клавиш, ждать указанное время. /? Отображение справки в командной строке.

TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1

Весь текст примера можно внести в bat-файл,
запустить и посмотреть, как это работает.
Впечатляет.

Использование PAUSE

  • размер шрифта уменьшить размер шрифтаувеличить размер шрифта
  • Печать
  • Эл. почта

Pause позволяет остановить выполнение Bat-файла до нажатия клавиши на клавиатуре. Это может быть полезно, например, если Вы хотите, чтобы пользователь подтвердил выполнение какого-то действия нажатием на клавишу. То есть, что он в своем уме и осознает, что происходит.

Смотрим пример, который копирует файл на дискету.

В момент выполнения программа остановится.

А после нажатия скопируется. Но на экране останется окно.

Если Вы не хотите чтобы оно было, вызовите последней командой cls

Читайте также: