Как остановить выполнение bat файла
Команда 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
Команда EXIT используется для завершения пакетных файлов с установкой значения переменной ERRORLEVEL или для завершения командного процессора CMD.EXE ( для выхода из командной строки), если она выполняется вне пакетного файла.
Формат командной строки:
EXIT [/B] [exitCode]
Параметры командной строки:
/B - Предписывает завершить текущий пакетный файл-сценарий вместо завершения CMD.EXE. Если выполняется вне пакетного файла-сценария, то будет завершена программа CMD.EXE
exitCode - Указывает цифровое значение. Если указан ключ /B, определяет номер для ERRORLEVEL. В случае завершения работы CMD.EXE, устанавливает код завершения процесс с данным номером.
Примеры использования команды EXIT
exit - завершить текущий сеанс CMD
Команда EXIT с параметрами используются, как правило, только в командных файлах. Например, для индикации результата выполнения с установкой значения переменной среды ERRORLEVEL
REM перейти к метке, где выполняется выход с ERRORLEVEL=0
REM перейти к метке, где выполняется выход с ERRORLEVEL=1
REM установить ERRORLEVEL равный 0 и завершить работу
REM установить ERRORLEVEL равный 1 и завершить работу
Параметр /B используется в тех случаях, когда выполняется завершение командного файла, но необходимо продолжить работу командного процессора. Например, когда командный файл 1.bat вызывает командной CALL другой командный файл 2.bat , результат выполнения которого, характеризуется значением переменной окружения ERRORLEVEL . Если в вызываемом командном файле использовать команду EXIT без параметра /B, то будет завершена работа вызываемого файла 2.bat, а также вызывающего файла 1 .bat и интерпретатора CMD.EXE, т.е вместо выхода из вызываемого файла будет полностью завершен сеанс командной строки.
Простейший пример, когда командный файл 1.bat вызывает на выполнение другой командный файл с именем 2.bat и выводит на экран значение ERRORLEVEL, установленное при выходе из вызываемого файла:
echo Batch file 2.bat executed with ERRORLEVEL = %ERRORLEVEL%
Файл 2.bat завершается командой EXIT с установкой значения ERRORLEVEL, равного 128:
Batch file 2.bat executed with ERRORLEVEL = 128
Попробуйте убрать параметр /B в команде EXIT командного файла 2.bat и оцените полученный результат.
Для того, чтобы вручную прервать выполнение запущенного bat-файла, нужно нажать клавиши <Ctrl>+<C> или <Ctrl>+<Break>. Однако часто бывает необходимо программно приостановить выполнение командного файла в определенной строке с выдачей запроса на нажатие любой клавиши. Это делается с помощью команды PAUSE. Перед запуском этой команды полезно с помощью команды ECHO информировать пользователя о действиях, которые он должен произвести. Например:
ECHO Вставьте дискету в дисковод A: и нажмите любую клавишуPAUSE
Команду PAUSE обязательно нужно использовать при выполнении потенциально опасных действий (удаление файлов, форматирование дисков и т.п.). Например,
ECHO Сейчас будут удалены все файлы в C:\Мои документы!ECHO Для отмены нажмите Ctrl-CPAUSEDEL "C:\Мои документы\*.*"
Вызов внешних командных файлов
Из одного командного файла можно вызвать другой, просто указав его имя. Например:
REM Вывод списка log-файлов
REM Передача выполнения файлу f.bat
Однако в этом случае после выполнения вызванного файла управление в вызывающий файл не передается, то есть в приведенном примере команда
(и все следующие за ней команды) никогда не будет выполнена.
Для того, чтобы вызвать внешний командный файл с последующим возвратом в первоначальный файл, нужно использовать специальную команду
REM Вывод списка log-файлов
REM Передача выполнения файлу f.bat
В этом случае после завершения работы файла f.bat управление вернется в первоначальный файл на строку, следующую за командой CALL (в нашем примере это команда COPY A:\*.* C:\).
Операторы перехода
Командный файл может содержать метки и команды GOTO перехода к этим меткам. Любая строка, начинающаяся с двоеточия :, воспринимается при обработке командного файла как метка. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Приведем пример.
Пусть имеется командный файл следующего содержания:
ECHO Эта строка никогда не выполнится
REM Продолжение выполнения
После того, как в этом файле мы доходим до команды
его выполнение продолжается со строки
REM Продолжение выполнения
В команде перехода внутри файла GOTO можно задавать в качестве метки перехода строку :EOF, которая передает управление в конец текущего пакетного файла (это позволяет легко выйти из пакетного файла без определения каких-либо меток в самом его конце).
В качестве команды в строке командного файла можно использовать также командный файл. Причем, для передачи с возвратом обратно к точке выполнения вызывающего командного файла используется команда CALL. Попробуйте создать командный файл test.bat, следующего содержания:
@ECHO OFF
ECHO Вызов 1.bat
CALL 1.bat
ECHO Возврат.
В этом же каталоге, создайте второй файл под именем 1.bat, содержащий команду
PAUSE , приостанавливающую выполнение командного файла до нажатия любой клавиши.
@ECHO OFF
pause
Вызываемый командный файл может создавать переменные и присваивать им определенные значения, которые будут доступны для обработки в вызывающем файле. Попробуйте изменить файл 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 Выполняется файл: %0
ECHO Файл запущен со следующими параметрами.
REM Начало цикла
IF -%1= =- GOTO ExitLoop
REM Сдвиг параметров
REM Переход на начало цикла
REM Выход из цикла
Если запустить primer.bat с четырьмя параметрами:
primer.bat А Б В Г
то в результате выполнения на экран выведется следующая информация:
Выполняется файл: primer.bat
Файл запущен со следующими параметрами:
Рассмотрим теперь оператор IF в следующем виде:
IF [/I] строка1 оператор_сравнения строка2 команда
Синтаксис и значение операторов_сравнения представлены в табл. 3.2.
Таблица 3.2. Операторы сравнения в IF
Приведем пример использования операторов сравнения:
IF -%1 EQL –Вася ECHO Привет, Вася!
IF -%1 NEQ –Вася ECHO Привет, но Вы не Вася!
Ключ /I, если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Например, условие
Давайте попробуем создать простой BAT файл:
Как видите, режим Echo включен по умолчанию. В итоге отображается и команда и результат.
Давайте его выключим.
после отключения режима отображения. CLS это внутренняя команда MS DOS и может вызываться
прямо из командной строки.
Вот теперь то что надо, почти настоящая программа.
В BAT файлах можно использовать любые команды MS DOS. Смысл нашей программы будет в том,
чтобы она создала папочку и скопировала туда содержимое текущей папочки. Пишем:
И смотрим в проводнике:
Вот так, все получилось ! И не надо постоянно копировать много файлов и создавать папочку.
Совершенно не обладая навыками программирования Вы можете все-таки облегчить себе жизнь.
Здесь нам может помочь команда CALL:
Давайте попробуем создаем в той же папочке, где и наш файл для резерва, новый BAT файл
General.Bat с вызовом другого.
Запускаем и смотрим.
И результат тот же.
Вызывая из командной строки bat файл:
или из другого файла:
Внутри этого BAT файла Вы можно обработать параметры. Для получения параметра мы
должны использовать символ % и номер параметра. MS DOS заменит эту конструкцию
переданным параметром. Давайте пробовать:
Pause позволяет остановить выполнение Bat-файла до нажатия клавиши на клавиатуре.
Это может быть полезно, например, если Вы хотите, чтобы пользователь подтвердил
выполнение какого-то действия нажатием на клавишу. То есть, что он в своем уме и
осознает, что происходит.
Смотрим пример, который копирует файл на дискету.
В момент выполнения программа остановится.
А после нажатия скопируется. Но на экране останется окно.
Если Вы не хотите чтобы оно было, вызовите последней командой cls
И после копирования оно пропадет.
IF можно использовать для сравнения. Оператор условного выполнения команд в
В случае сравнения строк если сравнение верно, то будет выполнена команда за IF,
иначе она будет пропущена. Итак, создадим general.bat, который будет запускать с
параметрами другой bat файл.
А в командном файле 8.bat напишем условие.
Сработала только строка с параметром A.
В прошлом примере мы посмотрели IF, но как нам поступать, если нужно выполнить
больше чем одну команду? Вот тут нам поможет GOTO.
Эта команда переводит выполнение Bat-файла на указанную метку. Давайте
переделаем прошлый пример на вывод нескольких строк в зависимости от
Посмотрите, что будет, если передан параметр B.
Команда shift позволяет сдвигать параметры.
Параметров может быть много. Например, столько:
Первый параметр - это %0 в нем имя вызываемого bat файла. Давайте проверим.
После вызова все параметры были смещены.
Итак, у нас есть внутренние команды и внешние. После того как в BAT файле
находится команда, то сначала проверяется есть ли такая команда внутри
файла с расширением exe или com во всех каталогах указанных в
переменной среды PATH. Смотрите на рисунок ниже.
такой команды нет, то будут исследованы все доступные пути на предмет
файлов с таким названием. Если файл будет найдет, то он будет запущен. Это
очень важно, так как позволяет нам очень быстро используя простые
средства разработки типа Turbo C++ или Turbo Pascal создавать
расширения стандартных команд. Сразу скажу, что подобные программы
должны создаваться для MS DOS, а современные средства разработки типа
Visual C++ 6.0 не умеют создавать эти простенькие программы.
Одним из недостатков BAT файлов является то, что в результате работы
какой-то программы мы не можем получить ее результат, кроме кода
возврата. Ну, например, мы хотим, чтобы при запуске BAT файла
производилось резервное копирование в папочку. Это мы можем сделать,
а вот как сделать так, чтобы имя папки формировалось в соответствии с
текущей датой. Умея немного программировать для DOS это можно
сделать. Напишем программу Times.exe, которая будет записывать в
указанный файл текущую дату. Я использовал Borland C++ 3.1, Вы
можете использовать все, что может делать программы в формате MS DOS.
Сам код и готовый EXE находится в проекте. Использовать его достаточно
легко, надо создавать BAT файл, в котором передается параметр.
В результате работы будет создан текстовый файл, в котором находится
А теперь немного посложнее, нам нужно написать программу, которая
возьмет эту строку из файла и создаст другой BAT файл, вписав туда
имя вызываемого BAT файла и параметры. Вот его код.
Сам код и EXE есть в проекте. Как этим EXE можно воспользоваться ? Смотрите:
Первый параметр - это файл откуда брать строку, второй параметр - это какой BAT файл сформировать, третий параметр - это какой BAT файл вызывать. Результат работы будет такой.
Нам осталось только сложить все в месте. Пишем backup.bat:
Получить дату в файл, сформировать BAT файл с параметрами и
запустить его. В результате работы все получится.
Вся идея в том, что последний BAT файл, который мы запускаем формируется динамически.
А весь код, который нужно выполнить пишется в Start.bat. Если Вы
хотите, чтобы копирование производилось на сервер, используйте
например, BAT файл, который у меня работает.
Можно добавить в автозапуск и Ваша папочка будет копироваться
на сервер каждый день, кроме того Вы сможете найти копии по
Здравствуйте. Прочитал вашу новую рубрику про Bat-файлы. Очень
полезная вещь. Сегодня мы, Windows-пользователи, забыли про
командные строки напрочь, а это плохо, потому что, благодаря им,
можно здорово автоматизировать некоторые операции. Я частенько
использую команду for, чем и хочу с вами поделиться.
Пример 1: Вы хотите подсчитать количество строк в текущей
директории во всех файлах *.cpp и *.h. У Вас, к примеру, есть
программа linecount.exe, которая считает строки для указанного
ей при запуске файла. Как с помощью BAT-файла пересчитать все
*.cpp и *.h? Можно вот так:
Эти же команды можно набирать непосредственно в командной
строке, но тогда вместо %%a пишется %а.
В конструкции for можно через запятую указывать не только
маски, но и имена, что можно продемонстрировать следующим
Пример 2: Нам нужно создать на диске папки с именами '1', '2',
. (Задача не очень то умная, но это первое что пришло мне в
голову. Главное - идея)
Просто, неправда? И главное - быстро. Пример можно усложнить,
добавив к созданию папки копирование в нее какого-либо файла,
что например, может быть полезно при копировании данных на
дискету. Резервирование данных в 5 директориях, скорее всего,
поможет считать записанную информацию дома, если только не
испортится нулевая дорожка :-)
Не забывайте, что в BAT-файлах для переменных вы должны
использовать префикс %%, а в командной строке - %.
1. Если использовать команду DATE /t >%D_Date% теперь есть
текущая дата в переменной %D_Date% можешь вычленять из нее,
что хочешь и компоновать как надо.
2. В W2000 есть зарезервированные системные переменные DATE
Читайте также: