Как предотвратить автоматическое закрытие консоли после запуска командного файла

Pause

Приостанавливает выполнение пакетной программы с выводом сообщения об ожидании нажатия
пользователем любой клавиши.

Параметры

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

Примеры

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

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

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума

этого сайта (требуется регистрация).

суммарного объема файлов, хранящихся в каталоге, »

Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными.

Вывод команды dir, которая осуществляет рекурсивный («/s») поиск файлов («/a:-d») по маске («*») в каталоге, заданном первым параметром пакетного файла («%1») и выводит числовую информацию без разделителей («/-c»), передаётся на вход команды «findstr.exe», действующей как фильтр строк.

В данном случае осуществляется поиск строк как регулярных выражений («/r») с точным совпадением («/x») по указанному шаблону («/c:»).

Шаблон состоит из простого выражения (для иллюстрации пробелы заменены на символ «_»):

        
  
  1. «»: произвольное количество (в том числе и нулевое) пробелов.
  2. «»: любая цифра, затем произвольное количество (в том числе и нулевое) цифр; данное выражение в целом используется из-за отсутствующего у «findstr.exe» квантификатора «+», означающего «предыдущий символ в количестве 1 и более раз».
  3. «»: один пробел.
  4. «»: любой не цифровой символ, затем произвольное количество (в том числе и нулевое) не цифровых символов.
  5. «»: аналогично п.1.
  6. «»: аналогично п.2.
  7. «»: один пробел.
  8. «»: аналогично п.4.

Вот примерный вывод команды «dir /s /-c»:

  Том в устройстве E имеет метку Works
 Серийный номер тома: FC23-6674

 Содержимое папки E:\Песочница\0414

11.12.2014 01:45 <DIR> .
11.12.2014 01:45 <DIR> .
09.12.2014 02:53 470 0001.cmd
09.12.2014 03:00 323 0002.cmd
11.12.2014 19:24 <DIR> 02
10.12.2014 23:13 0 03
09.12.2014 12:25 3596288 far2.x86.msi
11.12.2014 01:45 390144 setup.msi
08.12.2014 15:45 542661 Рабочая копия.rar
10.12.2014 23:45 82 Результат работы.txt
 7 файлов 4529968 байт

 Содержимое папки E:\Песочница\0414\02

11.12.2014 19:24 <DIR> .
11.12.2014 19:24 <DIR> .
11.12.2014 19:24 97 0001.cmd
 1 файлов 97 байт

 Всего файлов:
 8 файлов 4530065 байт
 5 папок 81670144 байт свободно  

После передачи этого вывода по конвейеру на вход команды «findstr.exe» с указанным шаблоном, на выходе останутся только строки:

  7 файлов 4529968 байт
 1 файлов 97 байт
 8 файлов 4530065 байт  

Эти строки последовательно перебираются по «for /f», извлекая третий по счёту токен («tokens=3»). На последнем проходе (при разборе последней строки) будет получено искомое значение.

This is the latest version of what I am using in practice for a ten second pause to see the output when a script finishes.

   BEST>@echo done
BEST>@set DelayInSeconds=10
BEST>@rem Use ping to wait
BEST>@ping 192.0.2.0 -n 1 -w %DelayInSeconds%000 > nul
  
  

I have tried the various solutions given here on an XP machine, since the idea was to have a batch file that would run on a variety of machines, and so I picked the XP machine as the environment likely to be the least capable.

   GOOD> ping 192.0.2.0 -n 1 -w 3000 > nul
  
  

This seemed to give a three second delay as expected. One ping attempt lasting a specified 3 seconds.

   BAD> ping -n 5 192.0.2.0 > nul
  
  

This took around 10 seconds (not 5). My explanation is that there are 5 ping attempts, each about a second apart, making 4 seconds. And each ping attempt probably lasted around a second making an estimated 9 seconds in total.

   BAD> timeout 5
BAD> sleep /w2000
BAD> waitfor /T 180
BAD> choice
  
  

Commands not available.

   BAD> ping 192.0.2.0 -n 1 -w 10000 > nul :: wait 10000 milliseconds, ie 10 secs
  
  

I tried the above too, after reading that comments could be added to BAT files by using two consecutive colons. However the software returned almost instantly. Putting the comment on its own line before the ping worked fine.

   GOOD> :: wait 10000 milliseconds, ie 10 secs
GOOD> ping 192.0.2.0 -n 1 -w 10000 > nul
  
  

To understand better what ping does in practice, I ran

   ping 192.0.2.0 -n 5 -w 5000
  
  

This took around 30 seconds, even though 5*5=25. My explanation is that there are 5 ping attempts each lasting 5 seconds, but there is about a 1 second time delay between ping attempts: there is after all little reason to expect a different result if you ping again immediately and it is better to give a network a little time to recover from whatever problem it has had.

:/>  Aero Glass 10 — цветная тема с эффектом стекла

ОЖИДАНИЕ ЗАДАННОГО ИНТЕРВАЛА ВРЕМЕНИ

Рассмотрим основные варианты организации ожидания ( паузы ) в bat / cmd файлах.

Для решения этой задачи в операционных системах, начиная с VISTA, присутствует команда
timeout
.
Так, для ожидания 10 секунд следует выполнить команду.

TIMEOUT /T 10 /NOBREAK

Если не использовать параметр /NOBREAK, то ожидание может быть прервано нажатием любой клавиши.

Как и во многих других случаях, может помочь утилита nircmd
.

(На момент написания страницы описание возможностей утилиты было
здесь
.
C этим списком я рекомендую ознакомится,
даже если для текущей задачи будет использовано другое решение.)

На просторах интернета можно найти утилиту wait.exe.
Точнее, даже несколько разных, включая исходные тексты программы.
Поэтому я не привожу здесь параметров вызова, смотрите их описание.

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

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

Так, паузу можно создать при помощи команды ping
:

ping -n 1 -w 100000 10.10.254.254 >nul

-n 1 – выполнить один запрос

-w 100000 – ждать ответа 100 секунд

(значение указывается в миллисекундах)

10.10.254.254 – IP адрес, который заведомо не существует
в локальной сети (важно!),
следовательно, никогда не ответит на ping т. е. событие не наступит.

>nul – перенаправление всего вывода команды ping в никуда.

Еще одно решение – посылать пинг на заведомо существующий адрес –
т. е. самому себе.
Количество посылаемых пакетов должно быть на единицу больше количества ожидаемых секунд.
Так, для ожидания 5 секунд следует выполнить команду:

ping -n 6 127.0.0.1 >nul

В том же пакете Ресурскит есть утилита choice, которую при известной
доле извращенности можно использовать для тех же целей:

choice /N /T:y,%сек% > nul

Для любителей экзотики.

Можно вычислить время окончания интервала ожидания
и занять чем-то несчастный процессор до наступления этого события.
Как результат – пауза организована только средствами bat / cmd.

Привожу слегка исправленный пример, взятый с сайта http://www.oszone.net.

Данная процедура позволит организовать задержку в выполнении.
Время ожидания должно быть меньше 60 сек.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума

этого сайта (требуется регистрация).

Новый раздел о средствах командной строки в рамках этого же проекта расположен
здесь

What command can I put at the end of a batch file to prevent auto-closing of the console after the execution of the file?

wjandrea's user avatar

9 gold badges
60 silver badges
82 bronze badges

asked Jun 12, 2009 at 18:57

joe's user avatar

In Windows/DOS batch files:

   pause
  
  

This prints a nice "Press any key to continue . . . "
message

Or, if you don’t want the "Press any key to continue . . ."
message, do this instead:

   pause >nul
  
  

Rob Kielty's user avatar

8 gold badges
39 silver badges
51 bronze badges

answered Jun 12, 2009 at 18:59

Dave Bauman's user avatar

Dave Bauman

1 gold badge
19 silver badges
19 bronze badges

Depends on the exact question!

Normally pause
does the job within a .bat
file.

Если хотите cmd.exe
чтобы не закрыть, чтобы продолжать печатать, используйте cmd /k
команду в конце файла.

lakshman's user avatar

6 золотых значков
37 серебряных значков
63 бронзовых знака

ответил 12 июн 2009 в 19:00

Rutger Nijlunsing's user avatar

Если вы хотите, чтобы cmd.exe не закрывался и мог продолжать печатать, используйте cmd /k

Просто почувствовал необходимость уточнить, что /k
делает (с веб-сайта Windows):

/k
: Выполняет команду, указанную строкой, и продолжает.

С другой стороны pause
в конце пакетного файла просто приостанавливает процесс и завершает его cmd.exe
при первом нажатии кнопки

ответил 22 января 2015 в 6:48

Valentine Stone's user avatar

Если вы используете Maven
и вы хотите пропустить ввод и предотвратить закрытие консоли, чтобы увидеть результат, который вам нужен, чтобы использовать CALL
в скрипте, помимо просто «mvn clean install».

Так закроется консоль

 ECHO This is the wrong exemple
mvn clean install
pause

  

Таким образом консоль останется открытой

 ECHO This is the right exemple
CALL mvn clean install
pause

  

Если вы не используете CALL
команда ни один из прошлых примеров не будет работать. Потому что по какой-то причине поведение cmd по умолчанию при вызове другого пакетного файла (которым в данном случае является mvn) заключается в том, чтобы по существу заменить им текущий процесс, в отличие от вызова .exe

:/>  ТОП-7 бесплатных аналогов Microsoft Office

ответил 6 сен 2018 в 13:33

Andrey Hartung's user avatar

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

 start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

  

ответил 5 окт 2016 в 19:42

user6928445's user avatar

3 серебряных значка
2 бронзовых знака

Добавить cmd.exe
в качестве новой строки под кодом, который вы хотите выполнить:

 c:\Python27\python D:\code\simple_http_server.py

cmd.exe

  

ROMANIA_engineer's user avatar

ответил 16 ноя 2014 в 14:12

Lyfing's user avatar

1 золотой значок
19 серебряных значков
20 бронзовых знаков

мой способ состоит в том, чтобы написать настоящую партию (сказав “foo.bat”), чтобы закончить работу; затем создайте еще один “start.bat”:

 @echo off
cmd /k foo.bat

  

Я считаю, что это чрезвычайно полезно, когда я устанавливаю одноразовые переменные среды.

ответил 4 января 2017 в 10:02

Erich Chen's user avatar

Эрих Чен

1 серебряный значок
3 бронзовых знака

Звонок cmd
в конце командного файла.

ROMANIA_engineer's user avatar

ответил 17 окт 2014 в 21:50

user4155296's user avatar

У меня были проблемы с ответами здесь, поэтому я придумал это, которое работает для меня (ТМ):

 cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause

  

ответил 21 ноя 2018 в 6:15

kungfooman's user avatar

1 золотой значок
44 серебряных значка
33 бронзовых знака

кроме того pause
.

 set /p=

  
 runas /user:# "" >nul 2>&1

  

ответил 15 фев 2015 в 1:53

npocmaka's user avatar

18 золотых значков
148 серебряных значков
186 бронзовых знаков

 set /p exitkey= "Press any key to continue..."

  

NB: пробел после ‘=’ очень важен

ответил 29 сен 2017 в 4:07

Steven Mark Ford's user avatar

Я знаю, что опаздываю, но предпочитаю:

 :programend
pause>nul
GOTO programend

  

ответил 5 июн 2017 в 15:05

decadenza's user avatar

3 золотых значка
18 серебряных значков
31 бронзовый знак

Вариант 1:
Просто создайте 2 файла .bat и пропишите в первый:

 start <filename> // name of 2nd batch file
exit

  

Пакетный файл 2 — это файл, который не закрывается в конце.
Итак, теперь, когда вы открываете пакет № 1, он запускает второй и закрывается сам.
Когда 2-й закончит, он не закроется полностью (пока вы не поставите выход в конце)

Вариант 2:
Пакетный файл 1:

 call <filename>
cls
echo End of file
pause
<any code you want>

  

Когда 2-й файл заканчивается, он снова переходит к файлу 1 и выводит его остальную часть. При этом вы даже можете создавать обработчики ошибок. Если номер 1 дает сбой, он переходит в номер 2 и отображает его

ответил 17 ноя 2016 в 19:44

BlazeLP's user avatar

1 серебряный значок
8 бронзовых знаков

Есть два способа сделать это в зависимости от варианта использования

1) Если вы хотите, чтобы командная строка Windows оставалась открытой, чтобы вы могли видеть результат выполнения и затем закрыть ее; использовать

2) если вы хотите, чтобы приглашение Windows cmd оставалось открытым и позволяло выполнять послесловие некоторых команд; использовать

enter image description here

ответил 2 сен 2017 в 10:14

Hitesh Sahu's user avatar

Хитеш Саху

17 золотых значков
205 серебряных значков
154 бронзовых знака

 pause

  
 echo text to display
pause>nul

  

ответил 2 июн 2018 в 18:30

Zenedus's user avatar

Запустите файл .exe, а затем приостановите выполнение команды

пример пакетного скрипта:

 @echo off
myProgram.exe
PAUSE

  

пример пакетного скрипта с аргументами:

 @echo off
myProgram.exe argumentExample1 argumentExample2
PAUSE

  

ответил 24 января 2022 в 11:32

Xaalek's user avatar

1 серебряный значок
9 бронзовых знаков

Легко, добавьте cmd в последнюю строку bat, НО! если вы сбросите или очистите свой системный путь, вы должны начать свой cmd с полного пути, например:

 %windir%\system32\cmd.exe

  

Например, у меня есть bat-файл для сброса jdk до старой версии, например:

 PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

  

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

ответил 4 сентября 2017 в 4:12

Wei Kleeff's user avatar

Вэй Клефф

1 серебряный значок
11 бронзовых знаков

Если вы хотите, чтобы ваш cmd открывался в определенном длинном месте

ответил 16 сен 2020 в 8:15

Igor Golodnitsky's user avatar

Игорь Голодницкий

7 золотых значков
44 серебряных значка
67 бронзовых знаков

лично я поставил pause >nul
и он ожидает нажатия клавиши, не отображая никакого лишнего текста в консоли.

answered Jun 24, 2022 at 6:28

KneesDev's user avatar

using : call yourbatch.cmd

:/>  Как удалить Malwarebytes с компьютера полностью |

does the job
will process the script and then continue ejecuting other code on same window (cmd instance)

answered Aug 17, 2022 at 4:04

Rickz's user avatar

2 bronze badges

add pause (if you don't want anything else to show up add) >nul

it should look like

   @echo off
title nice
echo hello
pause >nul
  
  

all you will see is hello

RF1991's user avatar

3 gold badges
8 silver badges
17 bronze badges

answered Apr 20, 2022 at 13:13

Fox GamingYT's user avatar

Главная
| Случайная страница
| Контакты

Циклы и связывание времени выполнения для переменных

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

В результате его выполнения на экран будет выведена строка “a=Три”, то есть фактически команда

Для исправления ситуации нужно, как и в случае с составными выражениями, вместо знаков процента (%) использовать восклицательные знаки и предварительно включить режим связывания времени выполнения командой SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, наш пример следует переписать следующим образом:

В этом случае на экран будет выведена строка “a=OneTwoThree”.

Назначение команды – поиск строк в текстовых файлах.

/L Поиск строк дословно.

/R Поиск строк как регулярных выражений.

/S Поиск файлов в текущей папке и всех ее подпапках.

/I Определяет, что поиск будет вестись без учета регистра.

/X Печатает строки, которые совпадают точно.

/V Печатает строки, не содержащие совпадений с искомыми.

/N Печатает номер строки, в которой найдено совпадение, и ее содержимое.

/M Печатает только имя файла, в которой найдено совпадение.

/O Печатает найденный строки через пустую строку.

/P Пропускает строки, содержащие непечатаемые символы.

/F:файл Читает список файлов из заданного файла (/ для консоли).

/C:строка Использует заданную строку как искомую фразу поиска.

/D:список_папок Поиск в списке папок (разделяются точкой с запятой).

строка Искомый текст.

Использовать пробелы для разделения нескольких искомых строк, если аргумент не

имеет префикса /C. Например, ‘FINDSTR “Привет мир” a.b’ ищет “Привет” или

“мир” в файле a.b, а команда ‘FINDSTR /C:”Привет мир” a.b’ ищет строку

“Привет мир” в файле a.b.

Краткая сводка по синтаксису регулярных выражений:

. Любой символ.

* Повтор: ноль или более вхождений предыдущего символа или класса

^ Позиция в строке: начало строки

$ Позиция в строке: конец строки

\x Служебный символ: символьное обозначение служебного символа x

\<xyz Позиция в слове: в начале слова

xyz\> Позиция в слове: в конце слова

Пример командного файла для поиска в файле num.txt по образцу строк, в которых присутствует хотя бы одна двоичная цифра.

set /a kol=0

2. М ЕТОДИКА ВЫПОЛНЕНИЯ

1. Неформально ознакомиться с теоретическими сведениями.

2. Для подготовки текстов командных файлов рекомендуется использовать блокнот (Notepad). При этом следует избегать использования в выводимых на экран результатах работы командного файла букв русского алфавита.

3. Разработать и выполнить командные файлы (КФ), выполняющие следующие функции:

  1. Вывод на экран имен всех файлов с указанным расширением, находящихся в каталоге, имя которого задается при запуске командного файла первым параметром. Расширение файлов задается вторым параметром.
  2. Среди введенных с клавиатуры целых чисел (использовать SET /P) найти наибольшее и наименьшее. Признак конца ввода – знак -.
  3. В заданном каталоге и его подкаталогах найти общее количество подкаталогов. На экран вывести только требуемый результат.
  4. В каталогах, имена которых заданы первым и вторым параметрами командного файла, найти и вывести на экран имена файлов (расширения могут быть любые), присутствующие как в первом, так и во втором каталоге. Следует использовать только один
    оператор FOR.
  5. Вычисление и вывод на экран значения факториала целого числа, задаваемого при запуске КФ. Предусмотреть проверку заданного значения и при задании отрицательного значения или значения, превышающего максимально возможную величину, выводить соответствующие сообщения. Для проверки правильности вычислений использовать калькулятор.

4. Разработать и выполнить КФ в соответствии с табл. 5 (индивидуальные задания для студентов).

Таблица 5. Индивидуальные задания для бригад и студентов

Примечание. Для решения задач 1, 9 и 10 рекомендуется использовать команду Findstr

3. К ОНТРОЛЬНЫЕ ВОПРОСЫ



Оставьте комментарий