Приостанавливает выполнение пакетной программы с выводом сообщения об ожидании нажатия
пользователем любой клавиши.
Параметры
- /?
- Отображает справку в командной строке.
Примеры
Для создания пакетной программы запроса пользователю о необходимости заменить диск в одном
из дисководов, введите:
В этом примере все файлы с диска A копируются в текущий каталог. После этого на экран
выводится запрос вставить другой диск в дисковод А, затем команда
pause
приостанавливает работу программы, чтобы пользователь мог сменить диск и нажать
любую клавишу для продолжения процесса. Данная пакетная программа работает как бесконечный
цикл. Команда
goto
BEGIN возвращает управление на начало командного файла. Для завершения работы этой
пакетной программы требуется нажать комбинацию CTRL+C и Y.
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума
этого сайта (требуется регистрация).
суммарного объема файлов, хранящихся в каталоге, »
Без учёта вложенных каталогов? В том пакетном файле, что Вы нашли — со вложенными.
Вывод команды dir, которая осуществляет рекурсивный («/s») поиск файлов («/a:-d») по маске («*») в каталоге, заданном первым параметром пакетного файла («%1») и выводит числовую информацию без разделителей («/-c»), передаётся на вход команды «findstr.exe», действующей как фильтр строк.
В данном случае осуществляется поиск строк как регулярных выражений («/r») с точным совпадением («/x») по указанному шаблону («/c:»).
Шаблон состоит из простого выражения (для иллюстрации пробелы заменены на символ «_»):
- «»: произвольное количество (в том числе и нулевое) пробелов.
- «»: любая цифра, затем произвольное количество (в том числе и нулевое) цифр; данное выражение в целом используется из-за отсутствующего у «findstr.exe» квантификатора «+», означающего «предыдущий символ в количестве 1 и более раз».
- «»: один пробел.
- «»: любой не цифровой символ, затем произвольное количество (в том числе и нулевое) не цифровых символов.
- «»: аналогично п.1.
- «»: аналогично п.2.
- «»: один пробел.
- «»: аналогично п.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.
ОЖИДАНИЕ ЗАДАННОГО ИНТЕРВАЛА ВРЕМЕНИ
Рассмотрим основные варианты организации ожидания ( паузы ) в 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?
9 gold badges
60 silver badges
82 bronze badges
asked Jun 12, 2009 at 18:57
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
8 gold badges
39 silver badges
51 bronze badges
answered Jun 12, 2009 at 18:59
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
команду в конце файла.
6 золотых значков
37 серебряных значков
63 бронзовых знака
ответил 12 июн 2009 в 19:00
Если вы хотите, чтобы cmd.exe не закрывался и мог продолжать печатать, используйте
cmd /k
Просто почувствовал необходимость уточнить, что /k
делает (с веб-сайта Windows):
/k
: Выполняет команду, указанную строкой, и продолжает.
С другой стороны pause
в конце пакетного файла просто приостанавливает процесс и завершает его cmd.exe
при первом нажатии кнопки
ответил 22 января 2015 в 6:48
Если вы используете 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
ответил 6 сен 2018 в 13:33
Приведенный ниже способ размещения команд в пакетном файле открывает новые окна командной строки, и новые окна не закрываются автоматически.
start "title" call abcd.exe param1 param2
start "title" call xyz.exe param1 param2
ответил 5 окт 2016 в 19:42
3 серебряных значка
2 бронзовых знака
Добавить cmd.exe
в качестве новой строки под кодом, который вы хотите выполнить:
c:\Python27\python D:\code\simple_http_server.py
cmd.exe
ответил 16 ноя 2014 в 14:12
1 золотой значок
19 серебряных значков
20 бронзовых знаков
мой способ состоит в том, чтобы написать настоящую партию (сказав “foo.bat”), чтобы закончить работу; затем создайте еще один “start.bat”:
@echo off
cmd /k foo.bat
Я считаю, что это чрезвычайно полезно, когда я устанавливаю одноразовые переменные среды.
ответил 4 января 2017 в 10:02
Эрих Чен
1 серебряный значок
3 бронзовых знака
Звонок cmd
в конце командного файла.
ответил 17 окт 2014 в 21:50
У меня были проблемы с ответами здесь, поэтому я придумал это, которое работает для меня (ТМ):
cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause
ответил 21 ноя 2018 в 6:15
1 золотой значок
44 серебряных значка
33 бронзовых знака
кроме того pause
.
set /p=
runas /user:# "" >nul 2>&1
ответил 15 фев 2015 в 1:53
18 золотых значков
148 серебряных значков
186 бронзовых знаков
set /p exitkey= "Press any key to continue..."
NB: пробел после ‘=’ очень важен
ответил 29 сен 2017 в 4:07
Я знаю, что опаздываю, но предпочитаю:
:programend
pause>nul
GOTO programend
ответил 5 июн 2017 в 15:05
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
1 серебряный значок
8 бронзовых знаков
Есть два способа сделать это в зависимости от варианта использования
1) Если вы хотите, чтобы командная строка Windows оставалась открытой, чтобы вы могли видеть результат выполнения и затем закрыть ее; использовать
2) если вы хотите, чтобы приглашение Windows cmd оставалось открытым и позволяло выполнять послесловие некоторых команд; использовать
ответил 2 сен 2017 в 10:14
Хитеш Саху
17 золотых значков
205 серебряных значков
154 бронзовых знака
pause
echo text to display
pause>nul
ответил 2 июн 2018 в 18:30
Запустите файл .exe, а затем приостановите выполнение команды
пример пакетного скрипта:
@echo off
myProgram.exe
PAUSE
пример пакетного скрипта с аргументами:
@echo off
myProgram.exe argumentExample1 argumentExample2
PAUSE
ответил 24 января 2022 в 11:32
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
Вэй Клефф
1 серебряный значок
11 бронзовых знаков
Если вы хотите, чтобы ваш cmd открывался в определенном длинном месте
ответил 16 сен 2020 в 8:15
Игорь Голодницкий
7 золотых значков
44 серебряных значка
67 бронзовых знаков
лично я поставил pause >nul
и он ожидает нажатия клавиши, не отображая никакого лишнего текста в консоли.
answered Jun 24, 2022 at 6:28
using : call yourbatch.cmd
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
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
3 gold badges
8 silver badges
17 bronze badges
answered Apr 20, 2022 at 13:13
Главная
| Случайная страница
| Контакты
Циклы и связывание времени выполнения для переменных
Как и в рассмотренном выше примере с составными выражениями, при обработке переменных среды внутри цикла могут возникать труднообъяснимые ошибки, связанные с ранними связыванием переменных. Рассмотрим пример. Пусть имеется командный файл следующего содержания:
В результате его выполнения на экран будет выведена строка “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. Разработать и выполнить командные файлы (КФ), выполняющие следующие функции:
- Вывод на экран имен всех файлов с указанным расширением, находящихся в каталоге, имя которого задается при запуске командного файла первым параметром. Расширение файлов задается вторым параметром.
- Среди введенных с клавиатуры целых чисел (использовать SET /P) найти наибольшее и наименьшее. Признак конца ввода – знак -.
- В заданном каталоге и его подкаталогах найти общее количество подкаталогов. На экран вывести только требуемый результат.
- В каталогах, имена которых заданы первым и вторым параметрами командного файла, найти и вывести на экран имена файлов (расширения могут быть любые), присутствующие как в первом, так и во втором каталоге. Следует использовать только один
оператор FOR. - Вычисление и вывод на экран значения факториала целого числа, задаваемого при запуске КФ. Предусмотреть проверку заданного значения и при задании отрицательного значения или значения, превышающего максимально возможную величину, выводить соответствующие сообщения. Для проверки правильности вычислений использовать калькулятор.
4. Разработать и выполнить КФ в соответствии с табл. 5 (индивидуальные задания для студентов).
Таблица 5. Индивидуальные задания для бригад и студентов
Примечание. Для решения задач 1, 9 и 10 рекомендуется использовать команду Findstr
3. К ОНТРОЛЬНЫЕ ВОПРОСЫ