Пауза в bat файле: bat/cmd. Pause. , , ,

Приостановка выполнения командного файла

Выполняется командой pause.

Например:

cls

pause

prompt
$t$s$g

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

Командные файлы с параметрами

Часто приходится выполнять одни и те
же последовательности команд, но с
разными параметрами команд. В этом
случае создают командные файлы с
параметрами. Параметры определят те
части файла, которые могут изменяться
в зависимости от условий запуска
bat-файла.

Всего в командном файле можно использовать
до девяти параметров, они имеют обозначения
%1,
%2, …, %9
. Можно использовать
также параметр %0
– его значение – имя самого командного
файла. Если в файле не используются
какие-то параметры (не заданы), то их
значение считается равным пустой строке.

Рассмотрим следующий командный файл:

md %1

prompt
%2

copy con
%1\%3

В этом файле используются три параметра:
%1 – имя создаваемого каталога, %2 – вид
приглашения, %3 – имя создаваемого с
клавиатуры текстового файла.

Назовем данный командный файл b.bat.
тогда при его запуске нужно будет указать
три параметра, например:

b.bat first $d$l text.txt

Тогда после выполнения командного
файла будет создан каталог first
в текущем каталоге, затем изменено
приглашение MS DOS
и создан файл text.txt
в новом каталоге, текст которого нужно
будет ввести с клавиатуры.

Иногда в командных файлах бывает
недостаточно девяти параметров, для
решения этой проблемы используют команду
shift:

shift

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

Например, командный файл:

md
second

copy %1
second

shift

copy %1
second

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

b.bat
1.txt 2.txt

При выполнении этого файла будет создан
каталог second и в него будут
скопированы оба файла, первый – первой
командой copy, второй –
второй.

Отключение вывода команд bat-файла на экран и вывод сообщений

В процессе выполнения команд bat-файла
на экран выводятся эти команды со своими
параметрами. Чтобы отключить вывод
команд на экран используют команду echo
off
.

Включение вывода на экран выполняют
командой echo
on
.

Можно отключить вывод не всех строк
файла, а только отдельных, для этого
перед командой ставят символ «@».

Команда echo используется
также для вывода сообщений на экран:

Echo
сообщение

Например:

@echo off

cls

copy %1
%2

echo
Копирование завершено

В данном случае после начала выполнения
командного файла будет произведена
очистка экрана, а после завершения будет
выведено сообщение «Копирование
завершено».

Безусловный и условный переход в командных файлах

Командный файл может содержать метки
и команды перехода к ним. Метка ставится
в отдельной строке, она начинается с
символа «:», далее могут следовать буквы
или цифры.

Переход к метке осуществляется командой

goto
метка

после выполнения команды goto,
происходит переход к строке, следующей
за указанной в команде меткой. Если при
выполнении команды goto
соответствующая метка в файле не найдена,
то выполнение файла прекращается.

Например:

md newdir

goto a

copy 1.txt newdir

:a

copy
2.txt newdir

В этом случае после создания нового
каталога newdir, в него будет
скопирован файл 2.txt, а
команда copy 1.txt
newdir будет пропущена.

Описанный ранее переход называется
безусловным, так как не зависит ни от
каких условий. Если необходимо выполнить
какие-то команды в bat-файле
в зависимости от выполнения (или
невыполнения) какого либо условия,
применяют условный переход.

if
условие команда

Команда
выполнится в том случае, если условие
истинно. В противном случае происходит
переход к следующей за if
командой.

Возможны следующие виды условий:

строка1
== строка2
– условие истинно,
если строки полностью совпадают. Если
вместо одной из строк используются
параметры %0-%9, то при сравнении вместо
них подставляются соответствующие
значения параметров.

exist
имя_файла
– условие
истинно, если указанный файл существует,
причем вместо имени файла также могут
использоваться параметры.

not
условие
– отрицание
условия.

Например:

Echo off

Cls

if -%1== — goto n_p

if not exist %1 goto n_e

copy %1 first

echo Файл %1 скопирован

goto exit

:n_p

echo
Параметр отсутствует

goto
exit

:n_e

echo
Файл не существует

goto
exit

:exit

В этом примере команда if
-%1== — goto n_p
производит проверку наличия параметра,
и если параметр отсутствует, то
осуществляется переход к метке n_p.
Символ «-» позволяет избежать возникновения
синтаксической ошибки в случае отсутствия
параметра. Команда if not
exist %1 goto n_e
проверяет существование файла, указанного
в параметре. Если файл не существует,
то осуществляется переход к метке n_e.
И только если оба условия окажутся
ложными произойдет копирование файла
заданного параметром.

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

Для того, чтобы вручную прервать выполнение запущенного bat-файла, нужно нажать клавиши <Ctrl>+<C> или <Ctrl>+<Break>. Однако часто бывает необходимо программно приостановить выполнение командного файла в определенной строке с выдачей запроса на нажатие любой клавиши. Это делается с помощью команды PAUSE. Перед запуском этой команды полезно с помощью команды ECHO информировать пользователя о действиях, которые он должен произвести. Например:


ECHO Вставьте дискету в дисковод A: и нажмите любую клавишуPAUSE

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


ECHO Сейчас будут удалены все файлы в C:\Мои документы!ECHO Для отмены нажмите Ctrl-CPAUSEDEL «C:\Мои документы\*.*»

 

Вызов внешних командных файлов

Из одного командного файла можно вызвать другой, просто указав его имя. Например:

@ECHO OFF

CLS

REM Вывод списка log-файлов

DIR C:\*.log

REM Передача выполнения файлу f.bat

f.bat

COPY A:\*.* C:\

PAUSE

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

COPY A:\*.* C:\

(и все следующие за ней команды) никогда не будет выполнена.

Для того, чтобы вызвать внешний командный файл с последующим возвратом в первоначальный файл, нужно использовать специальную команду

CALL файл

Например:

@ECHO OFF

CLS

REM Вывод списка log-файлов

DIR C:\*.log

REM Передача выполнения файлу f. bat

CALL f.bat

COPY A:\*.* C:\

PAUSE

В этом случае после завершения работы файла f.bat управление вернется в первоначальный файл на строку, следующую за командой CALL (в нашем примере это команда COPY A:\*.* C:\).

Операторы перехода

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

Пусть имеется командный файл следующего содержания:

@ECHO OFF

COPY %1 %2

GOTO Label1

ECHO Эта строка никогда не выполнится

:Label1

REM Продолжение выполнения

DIR %2

После того, как в этом файле мы доходим до команды

GOTO Label1

его выполнение продолжается со строки

REM Продолжение выполнения

В команде перехода внутри файла GOTO можно задавать в качестве метки перехода строку :EOF, которая передает управление в конец текущего пакетного файла (это позволяет легко выйти из пакетного файла без определения каких-либо меток в самом его конце).

В качестве команды в строке командного файла можно использовать также командный файл. Причем, для передачи с возвратом обратно к точке выполнения вызывающего командного файла используется команда CALL. Попробуйте создать командный файл test.bat, следующего содержания:

@ECHO OFF
ECHO Вызов 1.bat
CALL 1.bat
ECHO Возврат.

В этом же каталоге, создайте второй файл под именем 1.bat, содержащий команду

PAUSE , приостанавливающую выполнение командного файла до нажатия любой клавиши.

@ECHO OFF
pause

При выполнении командного файла test.bat будет выдано на экран сообщение
Вызов 1.bat
и управление получит командный файл 1.bat с одной единственной командой pause. После начатия клавиши на клавиатуре управление будет возвращено вызвавшему командному файлу на строку «ECHO Возврат.» и на экран будет выдано
Возврат.
Если же в файле test.bat убрать CALL, оставив «1.bat», то возврат выполняться не будет.

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

@ECHO OFF
ECHO Вызов 1.bat
CALL 1.bat
ECHO Получено из файла %MYFILE% значение MYNUMBER=%MYNUMBER%.

а в файле 1.bat на следующее

@ECHO OFF
SET MYFILE=»Very good 1.bat»
SET MYNUMBER=99

Кстати, используя передачу управления командному файлу, можно организовать его зацикливание. Попробуйте добавить в конец файла test.bat строку:

CALL test.bat

Выйти из зацикливания командного файла можно по нажатию комбинации CTRL-Break.
Возможно использование команды CALL для вызова процедуры внутри командного файла. В этом случае в качестве аргумента используется не имя внешнего файла, а метка:

call :proc1
.
:proc1
….
exit

Таким образом, подобное использование команды CALL очень похоже на обычный вызов подпрограмм (процедур) в алгоритмических языках программирования.

Операторы условия

С помощью команды IF … ELSE (ключевое слово ELSE может отсутствовать) в пакетных файлах можно выполнять обработку условий нескольких типов . При этом если заданное после IF условие принимает истинное значение, система выполняет следующую за условием команду (или несколько команд, заключенных в круглые скобки), в противном случае выполняется команда (или несколько команд в скобках), следующие за ключевым словом ELSE(также как в языках программирования).

7.1 Первый тип условия. Проверка значения переменной

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

IF [NOT] строка1==строка2 команда1 [ELSE команда2]

(квадратные скобки указывают на необязательность заключенных в них параметров) или

IF [/I] [NOT] строка1 оператор_сравнения строка2 команда

Рассмотрим сначала первый вариант. Условие строка1==строка2 (здесь необходимо писать именно два знака равенства) считается истинным при точном совпадении обеих строк. Параметр NOT указывает на то, что заданная команда выполняется лишь в том случае, когда сравниваемые строки не совпадают.

Строки могут быть литеральными или представлять собой значения переменных (например, %1 или %TEMP%). Кавычки для литеральных строк не требуются. Например,

IF %1==%2 ECHO Параметры совпадают!

IF %1==Петя ECHO Привет, Петя!

Отметим, что при сравнении строк, заданных переменными, следует проявлять определенную осторожность. Дело в том, что значение переменной может оказаться пустой строкой, и тогда может возникнуть ситуация, при которой выполнение командного файла аварийно завершится. Например, если вы не определили с помощью команды SET переменную MyVar, а в файле имеется условный оператор типа

IF %MyVar%==C:\ ECHO Ура!!!

то в процессе выполнения вместо %MyVar% подставится пустая строка и возникнет синтаксическая ошибка. Такая же ситуация может возникнуть, если одна из сравниваемых строк является значением параметра командной строки, так как этот параметр может быть не указан при запуске командного файла. Поэтому при сравнении строк нужно приписывать к ним в начале какой-нибудь символ, например:

IF -%MyVar%==-C:\ ECHO Ура!!!

С помощью команд IF и SHIFT можно в цикле обрабатывать все параметры командной строки файла, даже не зная заранее их количества. Например, следующий командный файл (назовем его primer.bat) выводит на экран имя запускаемого файла и все параметры командной строки:

@ECHO OFF

ECHO Выполняется файл: %0

ECHO.

ECHO Файл запущен со следующими параметрами…

REM Начало цикла

:BegLoop

IF -%1= =- GOTO ExitLoop

ECHO %1

REM Сдвиг параметров

SHIFT

REM Переход на начало цикла

GOTO BegLoop

:ExitLoop

REM Выход из цикла

ECHO.

ECHO Все.

Если запустить primer.bat с четырьмя параметрами:

primer. bat А Б В Г

то в результате выполнения на экран выведется следующая информация:

Выполняется файл: primer.bat

 

Файл запущен со следующими параметрами:

А

Б

В

Г

 

Все.

Рассмотрим теперь оператор IF в следующем виде:

IF [/I] строка1 оператор_сравнения строка2 команда

Синтаксис и значение операторов_сравнения представлены в табл. 3.2.

Таблица 3.2. Операторы сравнения в IF

Оператор Значение
EQL Равно
NEQ Не равно
LSS Меньше
LEQ Меньше или равно
GTR Больше
GEQ Больше или равно

Приведем пример использования операторов сравнения:

@ECHO OFF

CLS

IF -%1 EQL –Вася ECHO Привет, Вася!

IF -%1 NEQ –Вася ECHO Привет, но Вы не Вася!

Ключ /I, если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Например, условие

IF /I DOS==dos …

будет истинным.

windows — Как приостановить пакетный скрипт по команде

спросил

Изменено
3 года, 1 месяц назад

Просмотрено
495 раз

У меня есть следующий пакетный скрипт:

 @echo off
компакт-диск C:\Program Files (x86)\Project
ВЫЗОВ init_env.bat
компакт-диск C:\Users\Documents\Project\Release
ЗАПУСК app.exe - версия 133
эхо-приложение было остановлено
 

Это запускает app.exe . На терминале также написано приложение остановлено . Можно ли каким-либо образом приостановить выполнение сценария после выполнения строки START app.exe -ver 133 и запустить только эхо-приложение , которое было остановлено , когда приложение по какой-то причине было закрыто или аварийно завершено.

Спасибо

  • окна
  • пакетный файл

0

Команда START следует удалить, поскольку он запускает исполняемый файл app.exe как отдельный процесс, выполняемый параллельно с cmd.exe , обрабатывающим пакетный файл. Затем cmd.exe , обрабатывающий пакетный файл, запускает app.exe и ждет с дальнейшей обработкой пакетного файла, пока app.exe не завершится.

Также рекомендуется всегда заключать строку файла/папки в " , даже если это на самом деле не нужно. Итак, cd /D "C:\Program Files (x86)\Project" и вызов "init_env.bat" следует использовать или даже лучше вызов "C:\Program Files (x86)\Project\init_env.bat" , если это работает, также из-за командного файла init_env.bat написано, чтобы работать независимо от того, какой текущий каталог выполняется. И последние cd /D "C:\Users\Documents\Project\Release" и "app.exe" -ver 133 должны быть прописаны в батнике.

Запустить в окне командной строки кд/? для справки по команде CD и значение опции /D .
старт /? выводит справку по команде START в окне cmd.

 @эхо выключено
вызовите "C:\Program Files (x86)\Project\init_env.bat"
cd /D "C:\Users\Documents\Project\Release"
"app.exe" - версия 133
эхо-приложение было остановлено
 

См. также предопределенные переменные среды Windows.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

пауза и | использование в пакетном файле (cmd)

спросил

Изменено
3 года, 4 месяца назад

Просмотрено
431 раз

Я хочу выполнить одну команду после того, как все вышеперечисленные команды были выполнены.

На самом деле, kkkk.exe — это просто задержка 5 с, а rrrr.exe — задержка 9с. Я пробовал следующие коды, и это работает, но я не знаю, почему.

 ::run.bat
    эхо стартовый тест
    (
    запустить kkkk.exe
    запустить rrrr.exe
    )|пауза
    эхо ппп
    Пауза
 

Что я знаю:

  • | : перенаправляет вывод первой команды на ввод второй команды

  • Кажется, | гарантирует, что команды до | сделано, так что он имеет вывод для пауза . Но просто запустите этот код, эхо паузы покажет;

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

    напрямую без ожидания 9с(rrrr.exe). Почему?

  • Через 9 секунд мне не нужно на самом деле вводить какую-либо клавишу, автоматически запустится echo ppp , почему?

  • Если я поменяю | до и , мне нужно ввести один ключ, чтобы запустить echo ppp , почему?

  • пакетный файл
  • cmd
  • труба
  • пауза

3

| : перенаправляет вывод первой команды на ввод
вторая команда

правильно.

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

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

напрямую без ожидания 9с(rrrr.exe). Почему?

Обе стороны трубы выполняются как собственные процессы. Конечно, pause покажет свое приглашение (это цель pause ), а затем дождитесь ввода (с другой стороны канала, который по завершении даст сигнал «Конец потока», что интерпретируется pause как «ВВОД»). Если вы хотите, вы можете подавить сообщение с помощью пауза > ноль

Через 9 секунд мне не нужно на самом деле вводить какую-либо клавишу, эхо ppp будет
автоматически запускаться, почему?

включено в пояснение выше.

Если я изменю | to &, мне нужно ввести одну клавишу, чтобы эхо ppp
будет запускаться, почему?

Это потому, что и просто означают «а затем сделать», поэтому пауза не получит сигнал от предыдущих команд и поэтому ждет клавиатуры.