Cmd — Пакетная обработка


Содержание

Пакетные файлы (bat, батники) Windows

Содержание статьи:

Вместо вступления. Что такое «батник»

Пакетные файлы (batch file) — это текстовые файлы в системе Windows, MS-DOS и OS/2, содержащие в себе команды, подготовленные для последовательного исполнения интерпритатором ОС

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

Для удобства написания и, естественно, восприятия разобью статью по разделам. Но сначала:

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Некоторые манипуляции с пакетными файлами могут нанести вред системе (порой даже непоправимый), поэтому предупреждаю сразу, ни автор статьи, ни администрация сайта не несут абсолютно никакой ответственности за последствия, которые может повлечь за собой выполнение действий, представленных в этой статье. Все материалы представлены здесь исключительно с образовательной целью, и для ознакомления. Надеюсь на ваше понимание и прямоту ваших рук.

Часть первая. Основные моменты при создании bat-файлов

  • Выше уже упоминалось, что пакетный файлы — это обычные текстовые документы. Так и есть, но для того, чтобы они работали и выполняли свои функции, им нужно придать подобающий вид, т.е. поменять расширение. Вообще в Windows используется как расширение *.bat, так и *.cmd, по сути они отличаются весьма незначительно лишь некоторыми нюансами, поэтому, в целях избежания путаницы, будем говорить о bat-файлах. Т.е. чтобы создать исполняемый пакетный файл, мы открываем стандартный блокнот (либо другой, привычный вам текстовый редактор), вбиваем туда нужные нам команды и сохраняем файл с любым именем и расширением bat;
  • По сути, перечень команд, описанных в пакетном файле (батнике) может быть воспроизведён вручную в командной строке (пуск — все программы — стандартные — командная строка), упаковываем их (команды) мы исключительно для удобства, простоты и моментальности (если позволите) воспроизведения;
  • Если испытываете что-то серьёзное и не уверенны в своих действиях, лучше испытывайте детище к примеру на виртуальной машине (в крайнем случае — на компьютере соседа);
  • Список возможных к использованию команд очень велик, посмотреть его можно, набрав в командной строке help, здесь же будут расшифровываться команды по мере их появления в создаваемых батниках;
  • Все инструкции, приведённые в статье, тестировались на ОС Windows XP и Windows 7.

Часть вторая. Синтаксис при написании bat-файлов

  • Каждая команда вводится с новой строчки;
  • Все команды выполняются последовательно за исключением тех случаев, когда внутри самого батника присутствует переход к определённой его части;
  • Комментарии в пакетный файл могут быть добавлены двумя способами:
    — либо после двух двоеточий ::переход к части копирования — либо при помощи команды goto, т.е. вводится команда goto, потом место для перехода, а между ними сам комментарий
  • Если команду необходимо ввести с атрибутом, то сначала вводим команду, затем пробел, слэш и, собственно, сам ключ copy /Y Чтобы посмотреть список возможных атрибутов к конкретной команде, нужно в командной строке ввести команду, затем пробел, слэш и знак вопроса dir /?
  • Для скрытия окна терминала выполняемой команды можно в начале строки поставить знак собачки @, если же требуется скрыть отображение выполнения всех команд, то проще (чтобы не ставить собачку в каждой строчке) в начале батника указать @echo off здесь команда echo off скрывает окна, а собачка впереди неё запрещает отображение выполнения самой echo off
  • Все директории внутри команд, для исключения возможных ошибок, будем вводить в кавычках;
  • По умолчанию при работе с кириллическим текстом на выходе вы можете получить иероглифы, при работе с папками/файлами, имеющими русские имена, вообще может ничего не получиться, это происходит из-за используемых кодировок, поэтому для исключения подобных неприятностей в начале пакетного файла будем указывать кодировку, корректно работающую с кириллицей следующей командой chcp 1251
  • Есть команды (например, удаление файлов, форматирование), которые могут потребовать подтверждения действий. Порой это бывает очень нежелательно, в таком случае, можно вписать ответ заранее в сам пакетный файл. Ответ записывается ДО! команды и отделяется от неё вертикальной чертой |Y|del
  • В командной строке (а значит и в пакетных файлах) при указании директории иногда бывает удобнее пользоваться переменными, нежели прописывать весь путь cd %APPDATA%

Приступим.

Часть третья. Резервное копирование при помощи батников

Резервное копирование данных — полезное и оттого весьма распространенное явление. Существует большое количество программ, отличающихся друг от друга функционалом, условиями распространения, уровнем (глубиной вопроса) и т.д. Бесспорно, пользоваться хорошей и красивой программой удобно и приятно, но если ваши задачи не слишком сложны, то элементарное создание бэкапов можно организовать и без использования стороннего софта, исключительно средствами ОСи.

Автоматическое копирование каталогов в папку backup

Для копирования каких-либо данных используется команда copy (копирование файла/файлов) или xcopy (копирование каталогов). Т.е., допустим, нам необходимо делать бэкап содержимого папки, в которой находятся ваши данные к дипломной работе (материалы, приложения, черновик самой работы и т.д.).
В этом случае текст будет следующим

Где D:\diplom\ — папка расположения всех материалов к диплому, а E:\backup\diplom\ — конечная директория резервной копии.
Создаём батник, кидаем его в автозагрузку (пуск — все программы — автозагрузка), и при каждом включении компьютера будет создаваться резервная копия (рк).Чуть усложним. Сделаем, чтобы при включении ПК старые данные сохранялись в папочке diplom_old, а новые в папочке diplom. Тогда батник будет иметь вид

del удаляет ранее созданную вторую рк.
rmdir переименовывает первую рк во вторую.
xcopy создаёт новую рк.
Атрибут /s применяет команду ко всем подкаталогам, атрибут /q отключает запрос на подтверждение действий.Если в двух копиях смысла нет, можно сделать так, чтобы заменялись только те файлы, которые были изменены, те же, которые не изменились, либо вообще были удалены из исходной папки, затронуты не будут. Для этого пишем следующее

Создание бэкапа в архиве

Ну и последнее, что здесь стОит рассмотреть, наверное, на данном этапе — это бэкапы в архиве
Рассмотрим изменённую предыдущую ситуацию. Допустим, нам надо, чтобы при каждом включении ПК создавалась копия папки, запакованная в архив.
Нам необходимо в автозагрузку положить батник со следующим содержимым

Архив папки D:\diplom будет создаваться в E:\backup, именем будет дата и время создания архива, т.е., например 16-Aug-12–14-06-53

Часть четвертая. Автоматизация процесса создания и удаления файлов/каталогов с использованием bat-файлов

Как создать папку из батника

Начнём с самого простого. Создание папки. Папка создаётся командой MD
Чтобы создать папку с именем backup в корне диска D:\, нам необходимо собрать следующего вида пакетный файл

Если же, допустим, нужна каждый день новая папочка с датой на месте имени, то батник будет иметь вид

Здесь строчкой set datetemp=%date:

-10% мы создаём переменную datatemp на время работы батника и присваиваем ей 10 символов значения системной даты;

Как создать текстовый файл из батника

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

Также, как и в примере с папкой, можно сделать именем текущую дату

Автоматическая очистка папки из батника

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

Строчкой cd «C:\Windows\Temp\» мы переходим в папку temp
Строкой echo Y|del *.* удаляем содержимое этой папки (не саму папку!)

Часть пятая. Прочие возможности bat-файлов

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

Одна из самых известных возможностей использования батников — это запись содержимого каталога в файл

После выполнения этого файла, в папке, откуда он запускался, будет создан файлик file.txt , содержащий перечень всех файлов и папок в этом каталоге с указанием размера и даты последнего изменения. Можно преобразовать этот файл до вида

/S заставит батник показать содержимое не только каталога, но и всех подкаталогов.
c:\ поможет отобразить содержимое не того каталога, откуда запускается бат-файл, а нужного нам.
X:\file.txt сохранит конечный файл со списком содержимого в указанное нами место;

Запуск файлов из командной строки

Очень часто полезным оказывается возможность запуска объектов из командной строки (в данном случае уже из бат-файлов). Причем как программ, так и других видов файлов (графических изображений, медиафайлов, текстовых документов и т.п.)
К примеру, если в автозагрузку добавить текстовый документ, то при включении ПК после загрузки системы вы его сразу увидите. Либо откроется плеер и будет проигрывать соответствующий трек. (Подробнее про способы добавления файлов в автозагрузку вы можете прочитать в статье: Автозагрузка. Добавление приложений в автозагрузку Windows)
Для того, чтобы это реализовать, нужно просто в теле бат-файла прописать точный путь до необходимого объекта. Например

Для системных же программ нужно указать лишь её обозначение.

При выполнении этого батника откроется калькулятор. В данном случае строчку chcp 1251 можно опустить (как и в некоторых ситуациях из примеров выше), однако если уж стандартизировать все наши пакетный файлы, то её можно и оставить, вреда не будет.

Часть шестая. Хитрости или шутки в сторону

Здесь рассмотрим ещё несколько интересных возможностей для применения батников. Из названия ясно, что некоторые из действий могут навредить системе (хотя это можно сделать и «голыми руками»), но если делать всё с умом, то может выйти достаточно интересно.

Шпионские штучки. Похищаем содержимое флешки

В самом начале статьи было указанно, что команды в батниках выполняются последовательно, если это не оговорено в самом теле исполнительного файла. Рассмотрим именно этот частный случай. Нуууу, допустим. Вы знаете, что к вам придёт знакомый (а может, знакомая) с просьбой произвести какие-то манипуляции с его/её флэш-карточкой, и вам очень хотелось бы слить все данные с этого накопителя на ваш ПК. Но делать это при госте не совсем удобно, да и просто можно получить «красную карточку». Что мы в таком случае делаем? Создаём батник следующего содержания

Создаём на этот бат-файл ярлычок, в свойствах ярлыка указываем, чтобы файл запускался в свёрнутом состоянии. Дважды кликаем по ярлыку. Что имеем.
:test обозначает начало действия батника
if exist g:\ goto go проверяет наличие в компьютере диска G:\, если он есть, то переходим к части :go (суть в том, что обычно вставленная флешка получает для обозначения первую свободную в системе букву латинского алфавита, проследить это на своём компе не так уж сложно. Вот именно эту буковку мы и указываем вместо G:\)
goto test если диск G:\ не был найден, возвращаемся к началу части :test
:go обозначает начало действия второй части батника
xcopy «G:\*.*» «C:\упс\*.*» копирует всё содержимое диска G:\ в папку упс на диске C:\
Т.е. после того, как мы запустили файл с ярлыка, он запускается в свёрнутом состоянии и циклически проверяет наличие флешки в ПК. Как только флешка там засветится, начнётся копирование всех данных с неё в указанную папку, причем привычного окна копирования файлов не выскочит, всё будет отображаться в свёрнутом окне терминала.Ну, всё что было описанно выше, полезно на своём компе, однако есть несколько плюшек, с помощью которых можно подшутить над другом/подругой.

Маленький вирус в автозагрузку

В общем виде всё будет выглядеть так: отправляем человечку файлик любым удобным способом, он запускает его на своём ПК, мы немного смеёмся, а потом говорим человечку, в чём соль и как всё исправить.Обычно, если что-то идёт не так, рядовой юзер первым делом перезагружает комп. Чтобы наш батник продолжал действовать и после рестарта, необходимо добавить его в автозагрузку (подчеркиваю, такие шутки проходят только с не самыми прошаренными пользователями ПК, более опытные, скорее всего, запросто найдут причину метаморфоз системы и легко избавятся от неё). Для этого в батничке пропише следующее

Первая строка добавляет файл в автозагрузку для всех пользователей на Windows XP (для конкретного пользователя в качестве пути указываем %USERPROFILE%\»Главное меню»\Программы\Автозагрузка\)
Вторая строка добавляет файл в автозагрузку для Windows 7.

Начало обеих строк в виде copy %0 означает копирование «самого себя».
Это сделали. Ещё нам хотелось бы, чтобы после запуска батника и при каждой загрузке ПК появлялась весёленькая надпись, к примеру, «ТЫ ЛАМЕР!»
Для этого добавляем следующее

Эта часть основанна на скриптах. Подробно расписывать не буду, кому интересно, найдёт материал в сети. Скажу лишь, что для некоторых ОС вид этого блока может слегка отличаться. Так, например, в семёрке (Win7) скрипт может выглядеть следующим образом

Однако, и первый вариант будет работать.

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

Едем дальше, ближе к вкусностям.
Чтобы наш объект экспериментов растерялся ещё больше, в тело батника по желанию добавляем что-нибудь из следующего:

%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul — строка меняет кнопки мыши местами. Весьма забавная штуковина, однако если человечек не отличается уровновешенной психикой, от этого советую отказаться. Чтобы поменять кнопки мыши обратно, заходи в панели управления в пункт мышь и там инвертируем галочку в поле обменять назначение кнопок.

Команда rundll32 keyboard, disable отключит клавиатуру вплоть до следующей перезагрузки, а rundll32 mouse, disable то же самое проделает с мышью. Если батник в автозагрузке, то при рестарте это дело, разумеется, повторится.

rundll32 shell32, SHExitWindowsEx 1 — выключит ПК.

rundll32 shell32, SHExitWindowsEx 2 — перезагрузит ПК.

rundll32 url.dll, FileProtocolHandler https://ya.ru/ — откроет в Internet Explorer поисковую страничку яндекса (сайт вместо ya.ru, само собой, можно вписать любой). Если проявить фантазию, можно придать батнику особую пикантность.

Ну и del «%SystemRoot%Cursors*.*» >nul удалит курсоры мыши ( пользоваться с осторожностью и в самых крайних случаях! )

Теперь остаётся только скомпоновать желаемые строки в единый код

Часть седьмая. Упаковка исполнительного файла

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

Программный способ упаковки батников

    • конвертировать bat-файл в *.exe при помощи какой-нибудь утилитки (например, bat to exe)
    • создать sfx-архив.

Упаковка батников в SFX-архив

Второй вариант в рамках данной статьи чуток подробнее и рассмотрим.
— Для начала нам надо установить на ПК подходящий архиватор (для этих целей я рекомендую WinRAR, т.к. создание sfx-архивов в нём реализовано наиболее удобно и просто).
— Создаём нужный нам пакетный файл (батник).
— Кликаем правой кнопочкой по батнику, выбираем из контекстного меню WinRAR => Добавить в архив (дальше по вкладкам)
— Общие. Имя любое. Формат — RAR. Метод сжатия обычный. В параметрах архивации ставим галочку напротив Создать SFX-архив.
— Дополнительно. Жмём на кнопочку Параметры SFX. Вкладочка «Общие», выполнить после распаковки — вписываем имя архивируемого батника с расширением. Во вкладке «Режимы» в разделе «Режим вывода информации» ставим галочку напротив «Скрыть всё». На вкладочке «Текст и графика» можно, например, добавить симпатичную иконку вашему архиву вместо стандартной. Если вы не художник, то иконку можно вытащить из любой программы/игры при помощи стороннего софта, например Restorator.
— На этом всё. Остальные опции на ваше усмотрение. Жмём кнопочку ОК. В исходной папке с батником появится ещё и наш новый sfx-архив.
— Чтобы добавить солидность файлу, позволить ему прибавить в весе, можно в архив «напихать» ещё что-нибудь, это может быть что угодно, т.к. цель — только увеличение размера.
— В архиве может быть сколько угодно батников, при создании архива мы указываем, что выполнять нужно первый (прописываем его имя с расширением), чтобы после этого выполнился следующий, в конце (либо в нужном нам месте) пишем

Т.е. когда дело дойдёт до этой команды, система переключится на исполнение файла с названием sled.bat, а затем вернётся к исходному.
Если же надо, чтобы работа первого батника не прерывалась, то используем другую команду

Вместо заключения

Стоит отметить, что кроме вышеперечисленных функций при помощи батников можно также редактировать и системный реестр, об этом наша отдельная публикация: Редактирование реестра Windows из командной строки, bat-файлы. Остаётся только напомнить, что вообще команд огромное количество, а вариантов их сочетаний и вовсе — бесконечное множество. Любую команду можно сначала проверить в командной строке, а только потом добавлять в тело пакетного файла.

Будьте осторожны и удачных вам экспериментов

Cmd — Пакетная обработка

Всем добрейшего.
Очень долго наблюдаю за форумом и блогом этого сайта и набрал очень много интересных моментов по разным языкам Java, Python, PHP, C# и другим. И однажды утром у меня встал вопрос, а можно ли отнести к языкам программирования так называемую «пакетную обработку» (я в большей степени имею ввиду файлы .bat/.cmd для Win и DOS или bsah/ash/sh для Unix-подобных)?
Прошу поделиться своими мнениями, и может быть подсказать вообще знания этих вещей сейчас востребовано? И если да то в каких конкретных случаях?
Заренее благадорю за ответы)))
И всех с наступающим.

Организация в пакетных файлах проверки условий и циклов

Лабораторная работа №3

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

Цель: Овладеть навыками работы с командными файлами в ОС Windows, научиться работать с параметрами командной строки и циклами и условным выполнением команд.


Общие положения

Пакетные (командные) файлы, также называемые программами пакетной обработки или сценариями, позволяют упростить выполнение утомительных и часто используемых операций. Еще в операционной системе MS-DOS появилась возможность записывать нужную для этого последовательность команд операционной системы в специальный файл, называемый командным файлом и имеющий расширение .BAT. Пакетный файл в Windows / представляет собой неформатированный текстовый файл, содержащий одну или несколько команд и имеющий расширение имени .batили .cmd.Когда имя такого файла вводится в командной строке (расширение можно не указывать), программа Cmd.exe выполняет по порядку команды, записанные в файле.

В пакетный файл можно включить любую команду. Некоторые команды, такие как for, goto и if, позволяют выполнять обработку условий в пакетных файлах. Например, if позволяет запускать команды в зависимости от выполнения заданного условия. Другие команды позволяют управлять вводом и выводом, а также запускать другие пакетные файлы.

Стандартные коды ошибок, возвращаемые большинством приложений — это 0, если ошибки отсутствуют, и 1 (или более высокое значение), если возникла ошибка. Чтобы определить значения отдельных кодов, см. справочную документацию приложения.

Прервать выполнение командного файла можно с помощью комбинации Ctrl+C илиCtrl+Break. В командном файле можно вызывать другой командный файл, указав его имя и, если надо, параметры. Но после окончания работы вызванного файла выполнение исходного командного файла продолжено не будет. Если нужно продолжить выполнение после выполнения вложенного файла, можно воспользоваться командой CALL.

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

Формат Значение
Курсив Данные, которые должен ввести пользователь
Полужирный шрифт Элементы, которые следует вводить точно, как показано
Пропуск (. ) Параметры могут повторяться несколько раз в командной строке
В квадратных скобках ([]) Необязательные элементы
В фигурных скобках (<>); варианты разделены вертикальной чертой (|). Пример: Набор значений, из которого можно выбрать только одно значение
Шрифт Courier Текст кода или выхода программы

Команды, используемые в командных файлах

Команда Echo

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

Синтаксис

Параметры

<on|off> — Включение или отключения режима отображения на экране информации о работе команд.

сообщение — текст для вывода на экран.

Примечания

· Команда echo сообщение может оказаться полезной, если отключен режим отображения работы команд. Для вывода сообщений из нескольких строк без вывода дополнительных команд между ними следует использовать несколько последовательных команд echo сообщение после команды echo off в пакетной программе.

· Если используется команда echo off, приглашение командной строки не отображается на экране. Чтобы отобразить приглашение, введите команду echo on.

· Чтобы отключить вывод строк, введите символ «коммерческого эт» (@) перед командой в пакетном файле.

· Чтобы вывести на экране пустую строку, введите следующую команду:

· echo.

· Если требуется отключить режим отображения команд и при этом не выводить на экран строку самой команды echo, введите символ @ перед командой:

@echo off

Команда Goto

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

Синтаксис

goto метка

Параметры

метка -Строка в пакетной программе, к которой выполняется переход.

· Работа с расширениями командыgoto

Если расширения команды включены (по умолчанию они включены) и в команде goto используется метка :EOF, управление будет передано в конец файла текущего пакетного сценария для выхода из него без назначения метки. Когда используется команда goto с меткой :EOF, перед меткой должно быть вставлено двоеточие. Например: goto :EOF

· Использование допустимых значений метки

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

· Совпадение меток в пакетных программах

Метка, заданная в команде, должна соответствовать метке в тексте пакетной программы. В Windows / строка пакетной программы, начинающаяся с двоеточия (:), опознается как метка и не обрабатывается как команда. Если в пакетном файле не содержится заданной метки, программа будет остановлена, а на экран будет выведено следующее сообщение:

Метка не найдена.

Команда Pause

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

Синтаксис

Pause

Примечания

· При запуске команды prompt выводится следующее сообщение:

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

· Если при работе пакетной программы была нажата комбинация CTRL+C для ее остановки, то на экран будет выведено следующее сообщение:

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

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

Команда Rem

Добавляет комментарии в пакетные файлы или файлы настройки.

Синтаксис

rem[текст]

Параметры

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

· Вывод комментариев на экран с помощью команды echo

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

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

Командным файлам из командной строки могут быть переданы аргументы. Аргументы задаются параметрами командной строки после имени файла. Файл Cmd.exe использует переменные с %0 по %9. При использовании пакетных параметров переменная %0 заменяется на имя пакетного файла, а переменные с %1 по %9 — на соответствующие аргументы, напечатанные в командной строке. Для доступа к переменным больше %9 используется команда shift. Параметр %* ссылается на все аргументы, которые передаются пакетному файлу, за исключением параметра %0.

Команда Shift

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

Синтаксис

Shift

Параметры отсутствуют

· Использование параметра командной строки shift с расширениями командного процессора

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

SHIFT /2

сдвинет %3 на %2, %4 на %3 и т. д. %0 и %1 останутся неизменными.

· Работа команды shift

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

· Работа более чем с 10 пакетными параметрами

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

· Использование %* с командой shift

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

· Смещение параметров в обратном направлении

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

Команда Call

Вызов одного пакетного файла из другого без завершения выполнения первого файла. Команда call принимает метки в качестве объекта вызова. Используемая в командной строке, а не в сценарии или пакетном файле, команда Call игнорируется.

Синтаксис

call [[диск:][путь] имя_файла [пакетные_параметры]] [:метка [аргументы]]

Параметры

[диск:][путь] имя_файла — задает имя и местоположение пакетного файла для запуска. Параметр имя_файла должен иметь расширение .bat или .cmd.

пакетные_параметры — задает данные командной строки, используемые программой пакетной обработки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %0 до %9) или переменные (например %baud%).

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

аргументы — задает данные командной строки, которые передаются в новый экземпляр программы пакетной обработки, начинающейся с :метки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %1 до %9) или переменные (например %baud%).

Пример

Для вызова программы Checknew.bat из другого пакетного файла в тексте родительского пакетного файла введите следующую строку:

Call checknew

Если родительская пакетная программа принимает два пакетных параметра и требуется передать их в файл Checknew.bat, включите следующую команду в родительскую пакетную программу:

call checknew %1 %2

Организация в пакетных файлах проверки условий и циклов

Команда If

Обработка условий в пакетных программах.

Синтаксис

if [not] errorlevel число команда [else выражение]

if [not] строка1==строка2 команда [else выражение]

if [not] existимя_файла команда [else выражение]

Параметры

not — задает выполнение команды только в случае невыполнения условия.

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

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

строка1==строка2 — условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1). Явно заданные строки нет необходимости заключать в кавычки.

exist имя_файла — условие выполняется, если существует файл с именем имя_файла.

оп_сравнения — трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения.

Оператор Описание
EQU равно
NEQ не равно
LSS меньше
LEQ меньше или равно
GTR больше
GEQ больше или равно


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

if [/i] строка1 оп_сравнения строка2 команда [else выражение]

if cmdextversion число команда [else выражение]

if defined переменная команда [else выражение]

Параметры

/i — сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1==string2 команды if. Эти сравнения являются общими. Если и строка1, и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел.

cmdextversion число — условие выполняется, только если номер внутренней версии, связанный с расширениями командного процессора Cmd.exe, равен или больше числа. первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены).

defined переменная — условие выполняется, если переменная определена.

выражение — команда и все ее параметры для обработке в командной строке при выполнении оператора else.

· Если условие, заданное в команде if, выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if, пропускается, а управление переходит к команде оператора else, если она задана.

· Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.

· Использование команды defined переменная

При использовании команды defined переменная добавляются следующие три переменные: %errorlevel%, %cmdcmdline% и %cmdextversion%.

%errorlevel% замещается строковым представлением текущего значения errorlevel, если только уже не существует переменная среды с именем ERRORLEVEL. В этом случае будет использовано ее значение.

В следующем примере показано использование значения errorlevel после выполнения пакетной программы:

echo Код возврата программы равен 0

echo Код возврата программы равен 1

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

if %errorlevel% LEQ 1 goto okay

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

%cmdextversion% замещается строковым представлением текущего значения cmdextversion, если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.

· Использование оператора else

Оператор else должен размещаться в той же строке, что и команда if.

Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:

IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. отсутствует

Примеры

Если файл Product.dat не удается найти, появится следующее сообщение:

if not exist product.dat echo Не найден файл данных

Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:

if exist c:mydir\nul goto process

Оператор if и команду echo можно использовать в одной командной строке: Например:

if exist *.rpt echo Отчет получен.

Команда For

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

for <%переменная|%%переменная> in (множество) doкоманда [ПараметрыКоманднойСтроки]

<%переменная|%%переменная> — обязательный параметр. Замещаемый параметр. Используйте %переменная для выполнения команды for из командной строки. Используйте %%переменная для выполнения команды for в пакетном файле. Переменные учитывают регистр и могут быть представлены со значением альфа, например, %A, %B или %C.

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

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

ПараметрыКоманднойСтроки — задает параметры командной строки, которые используются с указанной командой.

· Использование программы for

Команда for может быть использована в пакетном файле или непосредственно из командной строки.

· Использование параметров командной строки пакетного файла

Перечисленные ниже атрибуты применяются к команде for.

· В команде for переменная %%переменная (или %%переменная) будет заменяться текстовой строкой из заданного параметра множество, пока параметр команда не обработает все файлы этого множества.

· Имена параметров переменная команды for учитывают регистр буквы, они являются глобальными и одновременно может быть активно не больше 52 переменных.

· Для обозначения параметра переменная можно использовать любые символы, кроме цифр 0–9, чтобы не было конфликта с параметрами пакетных файлов %0%9. Для простых пакетных файлов вполне достаточно обозначений с одним символом, например %%f.

· Задание множества файлов

Параметр множество может представлять группу файлов или несколько групп файлов. Для задания групп файлов можно использовать подстановочные знаки (* и ?). Следующие множества файлов являются допустимыми:

(*.doc)

(*.doc *.txt *.me)

(jan*.doc jan*.rpt feb*.doc feb*.rpt)

(ar??1991.* ap??1991.*)

· Когда используется команда for, первое значение в параметре множество заменяет параметр %%переменная (или %переменная), а затем для обработки этого значения выполняется указанная команда. Это продолжается до тех пор, пока не будут обработаны все файлы (или группы файлов), которые соответствуют значению параметра множество.

· Использование ключевых слов in и do

· In и do не являются параметрами, но они требуются для работы команды for. Если какое-то из слов пропущено, на экран будет выведено сообщение об ошибке.

· Использование дополнительных форм команды for

Если расширения командного процессора разрешены (по умолчанию), то поддерживаются следующие дополнительные формы команды for.

Если параметр множество содержит подстановочные знаки (* и ?), команда, указанная в параметре команда, выполняется для каждого каталога (кроме множества файлов в указанном каталоге), совпадающего с параметром множество. Используется следующий синтаксис.

for /D <%% | %>переменная in (множество) doкоманда [ПараметрыКоманднойСтроки]

Проходит по дереву каталогов с корнем в [диск:]путь, выполняя инструкцию for для каждого каталога в дереве. Если после ключа /R не задан каталог, предполагается текущий каталог. Если параметр множество задано одной точкой (.), то команда просто перечислит каталоги в дереве. Используется следующий синтаксис.

for /R [[диск :]путь] <%% | %>переменная in (множество) doкоманда [ПараметрыКоманднойСтроки]

Дополнительную информацию по команде forможно получить с помощью справки.

Практическое задание

2.1. Запустите консоль командной строки.

2.2. Создайте пакетный файл, выполнив команду copyили с помощью файлового менеджера (Far, Total Commander).Имя файла задайте сами, расширение его должно быть .bat или .cmd,например My.bat. Наберите текст пакетного файла, выводящего сообщение из трех строк на экран с пустыми строками до и после него:

echo Hello again!

echo Command echo

2.3. Сохраните файл — нажмите Ctrl+Z.

2.4. Запустите файл на выполнение, набрав в командной строке его имя.

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

rem It is comment!

echo Please put a new disk

2.6. Рассмотрим использование параметров командной строки. Создадим файл для копирования содержимого одной папки в другую. Каждый раз, запуская файл, мы можем задавать новые папку-источник и папку-приемник. Например, для копирования содержимого из папки Folder1 в папку Folder2, где параметр %1 заменяется на значение Folder1, а параметр %2 — на значение Folder2. Новый файл будет состоять из одной строки:

xcopy %1\*.* %2

2.7. Если мы сохраним его под именем my3.cmd, то для запуска файла нужно ввести:

my3.cmd C:\folder1 D:\folder2

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

xcopy C:\folder1 \*.* D:\folder2

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

2.8. Рассмотрим использование команд shift, ifи собственные переменные окружения.

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

MYCOPY.BAT копирует произвольное число файлов в задаваемый при запуске каталог.Используется следующий синтаксис:mycopy каталог файл1 файл2 .

Создайте следующий пакетный файл:@echo offset todir=%1:getfileshiftif «%1″==»» goto endcopy %1 %todir%goto getfile:endset todir=echo EXIT!

Можно также использовать в команде shift ключ /n, который указывает команде начинать сдвиг с n-го аргумента, где n — число от нуля до восьми. При использовании shift /2 нет необходимости использовать переменную todir. Например:

Дата добавления: 2020-04-05 ; просмотров: 250 ; ЗАКАЗАТЬ РАБОТУ

Пакетные файлы

Цель работы: научиться пользоваться пакетными файлами.

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

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

Для создания командных файлов можно использовать текстовые процессоры, такие как Microsoft Word и Блокнот.

Командные файлы имеют расширение — BAT.

Для начала работы нам потребуется текстовый редактор Блокнот. Его можно запустить воспользовавшись меню Пуск->Программы->Стандартные->Блокнотлибо в строке Выполнить меню Пуск нужно набрать notepad.После чего набрать нужные команды и сохранить файл с расширением BAT.

В качестве примера рассмотрим пакетный файл, который выполняет две функции:

Создает в папке C:\Temp папку TXT

Затем если в корневом каталоге имеются файлы с расширением TXT они копируются в созданную нами папку, если же таких файлов нет, то на экран выводится сообщение об этом и папкаC:\Temp\TXTудаляется.

Текст этого файла будет следующим (предполагается, что C:\Temp уже существует):

if exist c:\*.txt goto yes

echo Files is missing

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

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

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


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

if exist %2 goto yes

echo Files is missing

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

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

имя.bat c:\temp\TXT c:\*.txt

Вместо имени нужно подставить путь к вашему пакетному файлу.

Для применения одной команды к нескольким разнотипным файлам можно использовать команду FOR

for %%х in (список файлов) do команда %%c

Вместо х подставляется любой символ от a до z, в списке файлов можно использовать * и ?

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

for %%c in (0,1,2,3,4,5,6,7,8,9) do copy %%c* %1

Команды реконфигурирования системы:

SET — Вывод, установка и удаление переменных среды.

переменная — Имя переменной среды.

строка — Текст, представляющий значение переменной среды.

Ввод SET без параметров позволяет вывести текущие значения переменных среды.

PATH — Вывод либо установка пути поиска исполняемых файлов.

Ввод PATH ; позволяет очистить путь поиска, ограничив его текущим каталогом.

Ввод PATH без параметров приводит к отображению текущего пути поиска.

Для Windows 2000 или Windows XP: при включении в командную строку переменной %PATH% прежний путь поиска добавляется в конец нового.

APEEND –задание порядка поиска файлов

BREAK — Включение/выключение режима обработки комбинации клавиш CTRL+C.

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

VERIFY — Установка режима проверки правильности записи файлов на диск.

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

DATE — Вывод либо установка текущей даты.

Ввод DATE без параметров позволяет получить текущее значение даты и выдать запрос на ввод нового значения даты.

Нажатие клавиши ENTER оставляет значение даты без изменения.

TIME — Вывод и установка системного времени.

Ввод TIME без параметров позволяет получить текущее значение времени и выдать запрос на ввод нового значения.

Нажатие клавиши ENTER оставляет значение времени без изменения.

LOADFIX – совместимое с устаревшими версиями системы выполнение программ. Загрузка в первые 64 Кб основной памяти

process — запуск программы на выполнение

Команды пакетных файлов:

@ — скрытие строки на экране

CALL — Вызов одного пакетного файла из другого.

параметры_вызова — Параметры командной строки, использующиеся при вызове пакетного файла.

MORE– Последовательный вывод данных по частям размером в один экран.

MORE [/E [/C] [/P] [/S] [/Tn] [+n] ] — Вывод следующей страницы

— Вывод следующей строки

CHOICE — Предложение пользователю нескольких вариантов на выбор.

/C[:]варианты — Варианты ответа пользователя. По умолчанию строка включает два варианта: YN

/N — Ни сами варианты, ни знак вопроса в строке приглашения не отображаются.

/S — Учитывать регистр символов.

/T[:]c,nn — Ответ «c» выбирается автоматически после nn секунд ожидания

текст — Строка приглашения

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

ECHO — Вывод сообщений и переключение режима отображения команд на экране.

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

FOR — Запуск указанной команды для каждого из файлов в наборе.

%переменная — Подставляемый параметр.

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

команда — Команда, выполняемая для каждого из файлов в наборе.

параметры — Параметры и ключи, необходимые для выполнения команды.

При использовании команды FOR в пакетном файле вместо записи %переменная

следует использовать запись %%переменная.

GOTO — Передача управления в отмеченную строку пакетного файла.

метка — Текстовая строка, играющая в пакетном файле роль метки.

Метка должна находиться в отдельной строке программы и начинаться с двоеточия.

IF — Оператор условного выполнения команд в пакетном файле.

IF [NOT] ERRORLEVEL число команда

IF [NOT] EXIST имя_файла команда

NOT — система выполняет команду лишь в том случае, если условие ложно.

ERRORLEVEL число — Условие истинно, если последняя запущенная программа завершилась с кодом возврата, равным либо превышающим указанное число.

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

строка1==строка2 — Условие истинно при совпадении обеих строк.

EXIST имя_файла — Условие истинно, если указанный файл существует.

Форматирование диска для работы с системой.

/V[:метка] — Метка создаваемого тома.

/Q — Выполнение быстрого форматирования.

/F:размер — Размер форматируемого диска (например 160, 180, 320, 360, 720, 1.2, 1.44, 2.88).

/B — Отвод на диске места под системные файлы.

/S — Копирование на отформатированный диск системных файлов.

/T:дорожки — Число дорожек на каждой стороне диска.

/N:секторы — Число секторов, приходящееся на одну дорожку.

/1 — Форматирование только первой стороны диска.

/4 — Форматирование диска 5,25″, 360 Кбайт в дисководе для дисков высокой плотности.

/8 — Форматирование с созданием 8 секторов на дорожке.

/C — Проверка кластеров, помеченных как поврежденные

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

PAUSE

REM — Помещение комментариев в пакетные файлы и файл CONFIG.SYS.

SHIFT — Изменение содержимого (сдвиг) подставляемых параметров для пакетного файла.

SHIFT

Напишите пакетный файл, который бы обеспечивал выполнение нижеизложенных действий с паузой после каждого действия:

1. Постраничное отображение содержимого заданного текстового файла (передача через параметр) с паузой после заполнения каждого экрана.

2. Копирование списка файлов из текущего каталога в каталог C:\TEMP. Команда копирования на экран выводиться не должна!

3. Добавьте маршрут поиска папки C:\TEMP к уже имеющимся маршрутам и отобразите все установленные маршруты.

4. Отобразить содержимое всех TXT – файлов, находящихся в рабочем каталоге.

5. Удалите все ТХТ – файлы из каталога ТЕМР.

6. Скопируйте все файлы из каталога C:\Programs\NC4 в каталог C:\TEMP.

7. Если в папке ТЕМР есть ТХТ-файлы, то поменять им всем расширение на LST, а если нет ни одного ТХТ- файла , то создать файл 1.txt

8. Копировать файлы из текущего каталога в заданный через параметры (файлы с расширением TXT, DOC)

9. Отформатировать дискету в приводе.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Как то на паре, один преподаватель сказал, когда лекция заканчивалась — это был конец пары: «Что-то тут концом пахнет». 8383 — | 8011 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Краткие теоретические сведения. Файлы пакетной обработки

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

  1. I. Общие сведения
  2. I. Сведения о заявителе
  3. II. Общетеоретические вопросы
  4. II. Основные теоретические положения
  5. II. Основные теоретические положения
  6. II. Основные теоретические положения
  7. II. Основные теоретические положения
  8. II. Основные теоретические положения
  9. Безумный день продолжался. С фронта поступали все новые отчаянные сведения.
  10. Введение . Общие сведения о языке и речи.
  11. ВВЕДЕНИЕ. ОСНОВЫ ТЕОРИИ ЦВЕТА И СВЕДЕНИЯ О ЦВЕТЕ
  12. Виды налогов и их краткие характеристики (согласно НК РФ по состоянию на 01.01.2012г.)
Цукерберг рекомендует:  Как «защищать» свой дизайн перед клиентом


Файлы пакетной обработки. Использование в работе утилит операционной системы

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

Задание.

Создать файл конфигурации, который обеспечивает загрузку ОС в трех произвольно выбранных вариантах:

— с числом файлов 20, буферов 45, с количеством стеков 20, с установкой расширенного управления клавиатурой с нормализацией строк прокрутки, организации кэш-памяти в расширенной памяти;

— с числом файлов 20, буферов 40, с указанием месторасположения командного процессора, с загрузкой ОС в область дополнительной памяти, а свободные блоки старшей памяти будут доступны прикладным программам;

— Загрузку третьего варианта осуществить самостоятельно.

  1. Цель работы.
  2. Дать краткое описание основных директив и драйверов, используемых в файле конфигурации.
  3. В рабочем отчете зафиксировать задание, текст файла, результат его выполнения.
  4. Сделать выводы по работе.

Контрольные вопросы.

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

2. Какие директивы относятся к обозначению стандартных блоков директив?

3. Какая директива отвечает за число буферов DOS?

4. Что такое буфер ввода-вывода и буфер предввода? Сколько составляет размер буфера ввода-вывода?

5. Какие драйверы используются при создании файла конфигурации?

6. С помощью, какого драйвера можно организовать кэш-память для дисковых накопителей?

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

8. Какие драйверы отвечают за расширенное управление клавиатурой и дисплеем?

Лабораторная работа №3

Цель работы: изучить назначение и основные команды пакетных файлов; уметь редактировать и создавать командные файлы, изучить понятие, состав и назначение утилит DOS, уметь их использовать.

Довольно часто при работе с ПК бывает необходимо выполнять одни и те же команды DOS для того, чтобы осуществить некоторые периодически выполняемые действия. ОС позволяет записать нужную для этого последовательность команд в специальный файл, называемый командным. Командный файл должен иметь расширение .ВАТ. Командным (пакетным — batch) файлом называется последовательность команд DOS , записанная в текстовом файле и выполняемая путем ввода спецификации этого файла с клавиатуры. Командный файл может содержать любые команды, допустимые в командной строке, и запросы на выполнение программ. Кроме того, имеются дополнительные команды, используемые главным образом в командных файлах. Командные файлы создаются обычно каким-либо текстовым редактором или формируются командой COPY con имя_файла. Для выполнения командного файла необходимо набрать в командной строке его имя и задать, если необходимо, параметры. Прервать выполнение командного файла можно нажатием Ctrl-C или Ctrl-Break. В командном файле можно вызвать другой командный файл, указав его имя.

Средства DOS для поддержки командных файлов позволяют:

  • создавать линейные командные файлы;
  • организовывать разветвления в командных файлах;
  • создавать циклы в командных файлах;
  • разрабатывать вложенные командные файлы;
  • производить вывод информации из командных файлов;
  • осуществлять параметризацию командных файлов;
  • управлять отображением выполняемых строк командных файлов на экран;
  • включать в командный файл комментарии.

Параметризация командных файлов. Часто приходится выполнять одни и те же команды с небольшими изменениями. Параметризация сводится к возможности использования переменных и их означиванию перед запуском командного файла на выполнение. Перед вызовом командного файла задаются аргументы, замещающие параметры. Допускается указывать до девяти параметров с именами %1-%9. Например, пусть необходимо создать командный файл ТЕХТ.ВАТ, осуществляющий печать текстового файла:

Запустить его на выполнение можно строкой:

При выполнении этого командного файла символ %1 будет заменен на значение первого параметра при вызове командного файла, т.е. вместо %1 будет подставлено DOC1.TXT и будет выполнена команда TYPE DOC1.TXT > PRN. Если в командной строке при вызове задано меньше 9 параметров, то отсутствующие параметры заменяются пустыми строками. Если в командном файле необходимо использовать более девяти параметров, применяется команда SHIFT. В командном файле можно использовать также символ %0, значение которого — имя выполняемого командного файла. Если в командном файле знак % используется не для обозначения параметра, а для других целей, то его надо набирать дважды.

Символ @. По умолчанию команды пакетного файла выводятся на экран перед выполнением. Можно избежать вывода на экран любой отдельной строки файла. Для этого надо поставить в начале этой строки символ @. Например, если в командном файле имеется строка COPY C:\DOC1.TXT A: , то в результате ее выполнения на экран будет выведено сообщение:

C:> COPY C:\DOC1.TXT A:

Если в начале строки поставить символ @, то на экране отобразится только последнее сообщение.

Команда ECHO. Предназначена для включения и выключения эхо-отображения команд на экран.

Echo on — включает режим вывода выполняемых команд на экран;

Echo off — выключает отображение команд.

Команда ЕСНО позволяет выдавать из командного файла сообщения на экран:

Сообщение, выдаваемое на экран с помощью этой команды, выводится даже тогда, когда режим вывода исполняемых команд на экран выключен. Сообщение не может быть пустым. Перед командой желательно выполнить команду @echo off, чтобы сообщение не выводилось на экран дважды. С помощью команды ЕСНО можно получить звуковой сигнал компьютера. Для этого следует в сообщение, выводимое этой командой, включить символ с кодом 7. Это можно сделать, нажав клавишу Alt и, не отпуская ее, клавишу 7 в правой части клавиатуры. Для того, чтобы вывести на экран пустую строку, можно использовать команду ЕСНО: или вывести сообщение, состоящие из одного символа с кодом 255.

ECHO Командный файл

ECHO выводит текст

Комментарии. Комментарии в командный файл позволяет включать команда REM. Комментарии не интерпретируются как команды во время выполнения файла. Комментарии употребляются для улучшения удобочитаемости командного файла.

Если комментарии не желательно выводить на экран, перед ними можно поставит символ @.

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

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

Strike a key when ready .

(Нажмите любую клавишу, когда будете готовы)

Если нажать Ctrl-C или Ctrl-Break , будет выведено сообщение:

Terminate batch job (Y/N)?

(Прервать выполнение командного файла, Y-да, N-нет)

При нажатии клавиши N выполнение командного файла будет продолжено, а Y — прекращено.

Команда CALL. Предназначена для вызова одного командного файла из другого с последующим возвратом в точку вызова.

CALL имя_файла [параметры]

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

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

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

LABEL переход на метку

ECHO Для остановки нажмите Ctrl-Break

IF — проверка условий в командном файле. Команда IF позволяет в зависимости от выполнения некоторых условий выполнять или не выполнять команды в командном файле.

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

Команда — это любая допустимая команда. Эта команда выполняется, если условие в команде IF истинно, в противном случае команда игнорируется. Условие — это одно из приведенных ниже выражений:

ERRORLEVEL число — условие истинно тогда, когда код завершения предыдущей выполненной программы больше заданного числа или равен ему (код завершения устанавливается программами при окончании их работы, по умолчанию этот код равен 0);

строка1 == строка2 — условие истинно тогда, когда строка1 и строк2 полностью совпадают. Если в этих строках имеются символы %0-%9, то вместо этих символов подставляется параметры командного файла;

EXIST имя_файла — условие истинно тогда, когда указанный файл существует;

NOT условие — истинно тогда, когда указанное условие ложно.

1. IF NOT EXIST C:\DOC\W.TXT COPY A:\W.TXT C:\DOC

Если файл W.TXT на диске С: не существует, то скопировать его туда.

if -%1==+ goto no_param

if not exist %1 goto not_exist

echo Не задан параметр

echo Файл %1 не найден

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

FOR %х IN (список) DOS команда

х — любой символ (кроме 0-9, чтобы не было смешения с параметрами);

список — одно или несколько имен файлов, разделенных пробелами. В именах файлов можно использовать символы * и ?;

команда — любая программа или команда DOS, кроме команды For, если в команде употребляется %х, то оно заменяется именами файлов из списка.

При употреблении команды FOR в командном файле символ % должен удваиваться.

for %%f in (*.pas *.exe) do comp %%f a:%%f — сравнить

файлы с расширением .pas, .exe из текущего каталога с

такими же файлами на диске а:

for %%d in (*.txt) do type %%d — отобразить

содержимое всех .TXT-файлов в рабочем каталоге.

Команда Shift — сдвиг параметров в командном файле. Присваивает новые значения символам %0-%9. При этом %0 присваивается старое значение %1, %1 — старое значение %2 и т.д. %9 присваивается значение, следующее за старым значением %9 параметра в командной строке, если он не задан, то новое значение %9 — пустая строка.

Команда Shift полезна в одном из трех случаев:

  • обработка неопределенного числа аргументов;
  • обработка более девяти аргументов;
  • однообразная циклическая обработка аргументов.

Диалоговые командные файлы. Иногда в командном файле нужно выполнять различные действия по выбору пользователя. Это можно сделать с помощью функции BE программы ASK:

BE ASK «сообщение», список символов

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

BE ASK «Запустить редактор WORD [Y/N]?», YN

При ответе N значение ERRORLEVEL устанавливается

равным 2, при ответе Y — равным 1.

IF ERRORLEVEL 2 GOTO EXIT

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

Дата добавления: 2014-11-29 ; Просмотров: 417 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Пакетные файлы или BAT файлы — примеры

Если рассматривать исполняемые приложения, то среди них особую роль будут играть пакетные файлы с расширением BAT. Возможности ОС позволяют выполнить запись некоторой последовательности команд непосредственно в документ данного типа. Таким образом, получается файл, содержащий наборы команд. Это позволяет упростить функционирование ОС. Предусматривается наличие некоторого списка команд, которые могут быть запущены исключительно из пакетного документа.

Цукерберг рекомендует:  20 классных PSD шаблонов сайтов

Название BAT файлы было получено за счет наличия указанного расширения. Запуск пакетных документов является аналогичным приложениям .EXE и .COM. Следует отметить главное отличие от классических программ. BAT документы не содержат внутри код. Предусматривается наличие исключительно текстовой информации. Именно её считывает и выполняет командный процессор DOS. Существует несколько доступных вариантов:

  • Особые команды для вывода определенных сведений или приложений на экран.
  • Осуществление вызова различных пакетных документов.
  • Работа с другими приложениями.
  • Особые команды, обеспечивающие создание ветвлений, а также циклов.

Обеспечивается способность выполнения довольно сложных и многоуровневых последовательностей управления процессами. Наиболее значимым качеством пакетных документов требуется отметить автоматизацию работы над заданиями. Деятельность происходит без каких-либо вмешательств со стороны пользователей системы. Разрешается выполнение файлов BAT почти на всех этапах установки ОС Windows.

Допускается помещение внутрь пакетных документов всех существующих команд. Предполагается усложнение поставленных задач и даже создание условий. В этом деле оказывают поддержку команды goto, if и for. Требуется отметить autoexec.bat – файл необходим при осуществлении начальных настроек ОС в ходе запуска.

Следует рассмотреть простейший пример самостоятельного создания пакетного файла. Для выполнения поставленной задачи будет достаточно открыть новый документ с расширением TXT и ввести туда предложенный текст:

title Batch File Testing


echo Hello World

echo.

echo Starting Notepad

start notepad

echo.

echo Starting Wordpad

start Wordpad

echo.

pause

exit

После этого осуществляется сохранение документа и установка для него любого названия. Основным моментом требуется предусмотреть задание расширения CMD или BAT. После этого требуется выполнить запуск. Происходит назначение окна с названием «Batch File Testing». Работа указанного документа будет заключаться в том, чтобы открыть блокнот и выполнить запрос на нажатие любой клавиши. Когда это сделано, окно закроется.

Пакетные файлы применяются постоянно и сильно упрощают жизнь при осуществлении повседневных задач для программистов. Наиболее распространенными сферами использования BAT документов можно отметить резервное копирование данных, переименование, удаление файлов или документов, а также многое другое. Большинство действий в системе разрешается проводить только в том случае, если имеются администраторские права. Подобный фактор требуется принимать во внимание.

Задание паузы в файле BAT перед исполнением последующей команды

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

ping -n 1 -w 50000 123.123.123.254 >nul

Следует перечислить и расшифровать параметры:

n 1

Запрос будет исполняться только один раз

w 50000

Для ожидания ответа выбран интервал в 50.000 мс (50 секунд)

123.123.123.254

В качестве этого параметра прописывается IP адрес, которого точно не существует внутри локальной сети. Это позволяет утверждать о невозможности ответа на запрос

>nul

Производится перенаправление для выдачи в несуществующее место

Зацикливание в файле BAT выполнения команды

Довольно распространенной задачей требуется отметить периодический вызов некоторой команды через равные промежутки времени. Подобные мероприятия особенно часто нужны в случае обновления некоторых программ или системы. Оптимальным решением поставленной задачи является создание зацикленного в файла BAT с некоторой паузой. Ниже рассмотрен пример реализации такого способа:

:loop

ping -n 1 -w 60000 123.123.123.254 >nul

start notepad.exe

goto loop

Происходит открытие блокнота каждую минуту.

Создание папки, имя которой устанавливается текущей датой

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

MD %SYSTEMDRIVE%\%date:

Применение команды позволит создать новую папку и присвоить её название, соответствующее текущей дате. Недостатком указанного подхода считается невозможность получения результата в определённых ситуациях. Сюда можно отнести неподходящие установки отображения даты на компьютере или специфические региональные настройки. Чтобы подобные факторы не оказали своего влияния, применяется следующий вид:

md %systemdrive%\%date:

md %systemdrive%\%date:

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

@echo off

for /F «tokens=1-4 usebackq delims=. » %%1 in (`date /t`) do set mydate=%%4.%%3.%%2

ren test.txt test%mydate%.txt

Это позволит изменить название документа с test.txt на test(гггг.мм.дд).txt

Запрет повторного запуска программ

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

pslist.exe -e «операция«

if %errorlevel%==1 start «» «приложение«

Здесь упоминается специальная программа pslist. Она является бесплатной и может быть свободно загружена из интернета.

Выполнение резервных копий в автоматическом режиме

Ниже будет представлен скрипт, который отвечает за создание архивных копий документов с данными пользователей, а также некоторыми другими документами. Не предусматривается проведение подобных мероприятий с медиа файлами. Причиной является их значительный объем. Дополнительно, их потеря редко считается критичной.

rem задаём жесткий диск, где лежат папки для архивирования и винт куда будем бэкапить

SET DRIVE1ST=d:

SET DRIVE2ND=e:

rem пароль на архив

SET PASSWD=qmsdhgsdfgsdfhdsfhsdhf

rem если копировать для надёжности куда-нибудь на сетку

rem SET COPYTO=\\shpakk\c$\!backup

rem *** Проверим путь назначения архива

%DRIVE1ST%

if not exist \!backup md \!backup

if not exist \!backup\Departments md \!backup\Departments

if not exist \!backup\Exchange md \!backup\Exchange

if not exist \!backup\MEDEA_rdisk md \!backup\MEDEA_rdisk

cd \!backup

rem *** Backup \\SERVER\e$\Exchange

SET DIRNAME=Exchange

SET FILENAME=SERVER_Exchange

SET SOURCEDIR=e:\Exchange

rar a -r -m5 -dh -x*.mp3 -x*.fcd -x*.avi -x*.zip -x*.rar -x*.exe -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%\*.*

if not exist %DIRNAME%\%FILENAME%_new.rar goto next2

del %DIRNAME%\%FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%.rar %FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%.rar

copy %DIRNAME%\%FILENAME%.rar %COPYTO%\%DIRNAME%

:next2

rem *** Backup \\SERVER\e$\Users

SET DIRNAME=Departments

SET FILENAME=SERVER_Departments

SET SOURCEDIR=e:\Departments

if not exist %DIRNAME%\%FILENAME%_new.rar goto next3

del %DIRNAME%\%FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_4.rar %FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_3.rar %FILENAME%_4.rar

ren %DIRNAME%\%FILENAME%_2.rar %FILENAME%_3.rar

ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%_2.rar

:next3

rem это если архив будет большим — кусками бить -v357888k

rem rar a -r -m5 -v357888k -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%

rem архивирование пошло, не берём мультимедиа файлы

rar a -r -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -x*.jpg -x*.tif -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%

goto next4

:next4

rem *** Create repair disk on \\SERVER

SET DIRNAME=MEDEA_rdisk

SET FILENAME=MEDEA_rdisk

SET SOURCEDIR=%windir%\repair

%windir%\system32\rdisk.exe /s-

rar a -r -m5 -dh -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%\*.*

if not exist %DIRNAME%\%FILENAME%_new.rar goto next5

del %DIRNAME%\%FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%.rar %FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%.rar


copy %DIRNAME%\%FILENAME%.rar %COPYTO%\%DIRNAME%

:next5

В итоге имеем 3 папки: Departments, в ней:

SERVER_Departments_2.rar — 2х дневной давности

SERVER_Departments_3.rar — 3х дневной давности

SERVER_Departments_4.rar — 4х дневной давности

SERVER_Departments_old.rar — СТАРЫЙ Exchange

Так как архивируем обменник — он нам сильно то и не нужен храним только сегодняшний и вчерашний архивы

SERVER_Exchange_old.rar ну и систему на всякий в папке

Использование комментариев в файлах BAT

Чтобы разбираться в том, что именно осуществляет заданный BAT документ, рекомендуется применять комментарии. Использование их для главных блоков особенно важно в случае значительного объема текстовой информации. Просматривая файл через некоторое время, у Вас не возникнет проблем с пониманием особенностей его работы.

Написание комментариев можно осуществить несколькими способами. Когда приходится иметь дело с довольно большим количеством текста, рекомендуется следующий подход:

goto start

Этот пакетный файл предназначен

для автоматизации рутинных операций,

выполняемых ночью для синхронизации

содержимого корпоративного ftp-сервера

с ftp-серверами филиалов

Пакетный файл написан 01/01/2020

Последнее исправление внесено 10/02/2020

:start

Подобный вариант обеспечивает запуск пакетного документа, после чего выполняется переход контроля непосредственно команде, которая помещается после start. В некоторых ситуациях будет выгодным использовать иной подход. Например, хорошо подходит применение команды rem или два двоеточия. Они оптимально подходят для небольших по своему размеру комментариев с длиной в одну строчку.

rem Комментарий

:: Комментарий

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

Ожидание появления заданного документа в файле BAT

В некоторых ситуациях возникает потребность осуществить заданные действия при возникновении определенного файла. Осуществление такой задачи в пакетном документе предусматривается следующий подход:

:test

if exist c:\1.txt goto go

ping -n 20 127.0.0.1 >nul

goto test

:go

start notepad.exe

Приведенный текст задает необходимость выполнения проверки каждые 20 секунд того, существует ли в корне диска С документа с названием 1.txt. Если подобное событие произойдет, выполняются действия после goto. В конкретной ситуации производится запуск программы блокнота, но можно использовать любые другие варианты.

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

:test

if exist c:\1.txt goto go

ping -n 10 127.0.0.1 >nul

goto test

:go

rename c:\1.txt 1.txt

if not %errorlevel% == 0 goto go

del c:\1.txt

Как и раньше, попытка каких-либо действий с не полностью скопированным документом вызовет ошибку, но она не приведет к завершению. Произойдет повторение цикла и так до тех пор, пока ошибка не исчезнет.

Способы обхода процедуры проверки даты из файла BAT

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

Если Вы не хотите, чтобы программа использовала временную проверку, можно изменить свои настройки даты и времени. Этот вариант нельзя назвать приемлемым по многим причинам. Более эффективным подходом требуется назвать использование пакетного файла со специально прописанной информацией. Предполагается запуск приложения и последующий возврат даты к тому значению, что присутствовало ранее.

set tempdate=%date:

date 01-01-04

start notepad.exe

date %tempdate%

Что именно делают прописанные строки? Прежде всего, производится сохранение текущей даты в системе. Для этого применяется особая переменная. Во второй строке происходит установка системной даты на новое значение. В данном случае, это 1 января 2004 года. Сразу после этого предполагается проведение вызова программы, отвечающей за проверку системной даты. Мы использовали блокнот, но в Вашем случае требуется предусмотреть подобный момент. Пока Блокнот является открытым, пакетный документ ожидает, а сама дата не предусматривает изменение обратно. После закрытия Блокнота происходит возврат системной даты из переменной.

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

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

set tempdate=%date:

date 01-01-04

start notepad.exe

date %tempdate%

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

Импорт переменных реестра из пакетного файла

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

regedit.exe -s C:\environment.reg

Производится импорт в реестр сведений из документа environment.reg. Поскольку применяется специальный ключ –s, то не предусматривается вывода сообщений для подтверждения таких действий.

Экспорт переменных реестра из пакетного файла

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

regedit.exe -ea C:\environment.reg «HKEY_CURRENT_USER\Environment»

Происходит сохранение ветки HKEY_CURRENT_USER\Environment в документ, расположенный по адресу C:\environment.reg. При запросе на восстановление значений HKEY_CURRENT_USER\Environment, предполагается необходимым только выполнить запуск environment.reg. Примером использования такой команды следует назвать осуществление регулярного бэкапа настроек ПО или всей системы. Подобная информация находится в реестре и может быть выгружена оттуда. Полный адрес может включать в себя проблемы. Чтобы они не вызвали ошибку, надо позаботиться о заключении подобного пути в кавычки.

Применение внутри пакетного файла символа %

Символ процента относится к категории спецсимволов. Если требуется применить его внутри пакетного документа, то следует прописывать дважды.

echo 50%%

Если ввести указанную команду, то предполагается выдача на экран в BAT документе 50%. Без использования двойного символа %%, результатом станет только число 50.

Смена имен по маске из файла BAT

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

for /f «tokens=*» %%a in (‘dir /b PATH\*.*’) do ren PATH\%%a Prefix%%a

Требуется выполнить некоторые замены в зависимости от конкретной ситуации. Вместо PATH\ устанавливается расположение документов, название которых должно быть изменено. Prefix требуется заменить на символы, добавляемые к файлу в процессе смены имени. Важным условием является расположение самого файла BAT. Он не должен находиться в папке, где происходит переименование, иначе название документа будет изменено. Другой особенностью является работа с подпапками. Они не смогут избежать общей процедуры смены имени и к названию также добавится префикс.

Имеется возможность осуществить процедуру исключительно по отношению к некоторым типам файлов. Для этого в прописанной ранее строке надо изменить *.* на другой вариант – после звездочки указывается интересующее расширение (*.txt или иное). Это позволит переименовать только документы определенного вида. Пример с несколько другим подходом написан ниже:

set thePATH=C:\test

for %%I in (*.txt) do ren «%thePATH%\%%

Определение имени компьютера из пакетного файла

Непосредственно из файла BAT можно узнать название компьютера. Для этого необходимо прописать в документе

hostname

Команда предусматривает возврат имени устройства, на котором произошел её запуск.

Изменение IP адреса устройства из пакетного файла

Чтобы изменить IP адрес компьютера, следует применять команду netsh. Начать подобные мероприятия можно только после того, как станет определены текущие настройки. Требуется получить IP адрес на данный момент:

netsh interface ip show address

Происходит выдача текущей конфигурации. Нам необходимо узнать название применяемого интерфейса. В качестве примера это может быть FASTNET. Далее будет предполагаться необходимость изменения IP адреса на 172.22.0.33 (шлюз 172.22.0.1, маска 255.255.255.0). Предусматривается следующая строка в пакетном файле для выполнения поставленной задачи:

netsh interface ip set address name=»FASTNET» static 172.22.0.33 255.255.255.0 172.22.0.1 1

Обработка команды повлечет изменение IP адреса у интерфейса FASTNET на 172.22.0.33. Это и является искомой задачей. Указанная команда предлагает весьма широкие возможности в плане работы с сетевыми настройками.

Автоматизация удаления документов по типу

Задача очистки жесткого диска от временных файлов может быть решена с помощью следующей строки:

del /f /s /q C:\*.tmp

Следует разъяснить используемые параметры

/f

Происходит удаление всех документов, даже при наличии у них атрибута «только чтение»

/s

Выполняется удаление файлов из всех подкаталогов.

/q

Не всплывает окна, просящего подтверждения действиям удаления.

C:

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

*.tmp

Тип удаляемых документов.


Следует аккуратно использовать параметр /q. С ним удаление будет происходить без каких-либо запросов и это может привести к весьма неприятным последствиям.

Отправка сообщения непосредственно из файла BAT

Следует рассмотреть ситуации, когда осуществляется работа пакетного файла на одном из устройств в сети. В подобной ситуации будет особенно удобным, когда после завершения установленных мероприятий произойдет пересылка соответствующего сообщения для администратора. Это довольно просто сделать с применением следующей строки:

net send name Message text

Здесь параметр name означает название некоторого устройства, куда будет отправлено сообщение. В качестве самого сообщения следует прописать информацию Message text. Важно учитывать применяемый алфавит. Когда осуществляется работа с кириллицей, нужно применять кодировку MS-DOS (866 кодовая страница) или любую аналогичную ей. В ином случае, следует приготовиться к выдаче набора ничего не значащих символов. Таким образом, рекомендуется применять соответствующие типы текстовых редакторов.

В качестве примера подобной программы можно отметить FAR. Следует выполнить открытие пакетного документа через этот текстовый редактор за счет нажатия клавиши F4 или выбора соответствующего пункта. Указывается кодировка DOS – она исключает проблему невозможности распознания символов системой.

Запуск BAT файла из другого BAT документа

Чаще будет проще использовать возможность запуска из одного BAT файла другого, чем прописывание дополнительных строк действий. Для этого могут предусматриваться и более серьёзные рекомендации, чем удобство пользователя. Например, при необходимости приостановить осуществление основного пакетного документа во время выполнения другого или задать их параллельную деятельность.

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

call 2.bat

То есть, происходит вызов второго пакетного файла 2.bat, где пропишем одну команду:

pause

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

Стоит рассказать об иной ситуации, которая предусматривает необходимость параллельного выполнения пакетных документов. Подобный запрос возникает довольно часто и для его реализации можно использовать команду start, как оптимальный вариант в сложившихся условиях. Вернемся к созданным документам и в 1.bat введем некоторые корректировки:

Теперь предполагается открытие окна с предложением нажать любую кнопку при запуске 1.bat. При этом, окно главного пакетного документа закроется после выполнения своей задачи. Теперь Вы понимаете особенности применения команд start и call. Следует отметить тот факт, что они используются не только для того, чтобы запускать пакетные файлы. Команды вполне способны осуществить начало работы любого приложения или документа.

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

Когда в пакетном файле выполняются различные команды, предусматривается выдача результата работы на экран. Далеко не всегда имеется запрос в подобных действиях и требуется осуществить исполнение с отключенным выводом. Для этого следует применять символ @, который прописывается перед самой командой.

Требуется рассмотреть это на примере. Допустим, в пакетном файле имеется строка

echo Testing

На экран предусматривается выдача echo Testing, а потом результат деятельности команды – слово Testing. Можно написать внутри пакетного документа следующие сведения:

@echo Testing

Результатом работы станет только выдача слова Testing. Можно пойти ещё дальше и установить работу таким образом, чтобы отключился вывод команд на протяжении всего файла BAT. В таком случае, требуется задать

@echo off

Автоматический ответ на запросы о подтверждении

При работе некоторых команд может возникнуть ситуация, когда они должны совершить потенциально опасное действие в системе. В качестве примера рекомендуется назвать format или del. Подобный момент предусмотрен и выдается соответствующее предупреждение. Когда производится выполнение внутри пакетного файла, то его деятельность остановится. Она будет возобновлена только после подтверждения и это способно стать причиной потери драгоценного времени.

Существует способ осуществления задачи автоматизации. Предполагается использование перенаправления необходимого ответа в команду. Далее будет на примере рассмотрено подобное действие. Требуется создать на диске С обычную папку Folder и внутрь неё осуществим помещение любых 2х документов.

Запускаем интерпретатор команд и вводим в нем

del C:\Folder

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

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

echo Y|del C:\Folder

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

Перенаправление результата выполнения команды в документ

В случае деятельности BAT файлов сложного типа способны возникнуть проблемы в плане того, насколько правильно функционирует система. Именно по этой причине применяется специальное средство – запись в специальный лог-файл. Это предусматривает возможность ознакомиться с документом в дальнейшем и провести анализ того, насколько правильно осуществлялось выполнение поставленных задач.

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

echo Start %time%

echo Create test.txt

echo Copy Test.txt to Old_test.txt

copy C:\test.txt C:\Old_test.txt

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

Первой строкой задается отключение вывода команд. Это позволит получить в лог-документе исключительно результаты осуществления.

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

Третьей строкой указывается на то, что следующей командой будет создаваться текстовый документ test.txt.

Четвертая строка предназначена для того, чтобы непосредственно осуществить поставленную задачу. Следующим этапом производится запись в него одного слова – test.

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

В шестой строке осуществляется непосредственное копирование C:\test.txt в файл C:\Old_test.txt. Можно говорить о том, что происходит создание копии документа, но с присвоением для него нового названия.

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

Требуется рассмотреть дальнейшие возможности по модификации предложенного набора команд. Часто возникает запрос на выполнение хранения подобных документов в специально предназначенной для них папке. Каждый день должна производиться запись отчета с присвоением для него нового названия. Оптимальный вариант – это использование имени, состоящего из некоторого слова и автоматически добавляемой к нему текущей даты. Сам файл можно назвать 1.bat и сохранить.

Теперь создадим на диске папку LOG и полный путь к ней станет иметь указанный вид: C:\LOG. Следующим этапом происходит запуск команду установленного типа:

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

«C:\Program Files\1.bat»>C:\LOG\%date

Предполагается, что сразу после начала работы 1.bat в папке C:\LOG произойдет создание документа с названием, которое включает текущую дату. Именно указанный файл и требуется установить в качестве отчета о деятельности пакетного файла 1.bat. Если запустить рассмотренный BAT файл, то предполагается предоставление указанного далее результата:

Copy Test.txt to Old_test.txt

Скопировано файлов: 1.

Чтобы произвести перенаправление результатов работы bat-документа в лог-документа, следует применять специальный символ (>). Написание команды будет иметь представленный ниже вид:

Путь\ИмяФайла.bat>Путь\ИмяЛогФайла.txt

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

Создание папки из BAT файла

Чтобы выполнить поставленную задачу, предполагается несколько доступных вариантов действий. Наиболее простой способ включает в себя применение команды MKDIR или специального сокращенного аналога – MD. Предполагается написание указанной ниже строки в документе:

MD FolderName

Когда такая команда будет осуществлена, предполагается образование новой папки FolderName. Она помещается туда же, где располагается файл BAT. Вовсе не обязательно обеспечивать подобную привязку. Допускается создавать папку в любом указанном пользователем месте, что и внесено в следующую команду:

MD D:\FolderName

Разрешается применять системы переменных в тех случаях, когда выполняется создание папок. Пример заключается в следующем – требуется создать папку в корне жесткого диска D с названием в виде имени текущего юзера. Задается вот так:

MD D:\%USERNAME%

Дальнейшее усложнение команды предписывает создание папки с именем юзера на системном диске устройства:

MD %SYSTEMDRIVE%\%USERNAME%

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

set datetemp=%date:

MD %SYSTEMDRIVE%\%datetemp%

Нужно выполнить рассмотрение того, каким именно образом происходит функционирование набора команд. Первой строкой создается специальная переменная datetemp. Когда работы завершатся, она удаляется, но до этого момента играет важную роль. Предусматривается корректировка значения переменной на протяжении всего времени её существования. В строке осуществляется присвоение значения, представляющего собой десять символов с правой части от системной переменной DATE. Используется формат представленного типа: Дн ДД.ММ.ГГГГ. Сначала слева идет указание недель и оно не представляет интереса. При создании папок открывается большое количество путей, которыми разрешается следовать. Это открывает большие возможности перед пользователями. Если Вы хотите увидеть перечень всех переменных, следует применить команду SET.

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

Чтобы можно было создать документ в ходе осуществления пакетного файла, нужно написать специальный символ, отвечающий за перенаправление: (>). Предполагается перенаправление потока с экрана на документ. Рекомендуется использование указанного способа:

@echo Start file>C:\1.txt

Исполнение команды создает текстовый документ, обладающий строкой Start file. В ходе создания документа станет возможным применение в качестве части или всего его названия значений некоторых переменных. Схожие моменты уже рассматривались ранее. В качестве примера требуется отметить создание файла с названием, соответствующим дате его запуска.

set datetemp=%date:

@echo .>%SYSTEMDRIVE%\%DATETEMP%.txt

Работа начинается с того, что создается некоторая переменная, которая получает название datetemp. Для неё производится задание десятка символов с правой части системной переменной DATE. Это позволяет обеспечить применение исключительно действующих дат. Во второй строке указывается перенаправление (.) в документ. Его название получается за счет использования значения переменной datetemp. Должно быть указано TXT расширение, поскольку требуется получить текстовый документ.

Когда происходит работа в сети и пользователь с правами администратора реализует сбор сведений, рекомендуется добавлять название главного устройства. Это позволит упростить задачу дальнейших проверок. Требуется использование команды:

@echo .>C:\FolderName\%COMPUTERNAME%.txt

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

Процесс автоматизации запуска файлов BAT

Ряд процессов требует осуществления задачи запуска документов BAT без привлечения к подобному процессу внимания со стороны пользователя. Автоматическая деятельность системы вполне может быть прописана. Такой подход используется довольно часто. Классический планировщик из инструментов операционной системы вполне способен помочь в выполнении начала работы пакетных файлов по расписанию. Таким образом, происходит запуск в точно установленное юзером время или через некоторые интервалы.

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

Ещё одним вариантом можно назвать автоматический запуск некоторых действий каждый раз при входе пользователем в учетную запись или включении устройства. Ранее уже рассматривались основные направления деятельности и способы задания команд для подобных ситуаций.

Применяемые в документах BAT команды

Как уже упоминалось, допускается использовать все команды, некоторые из них предназначаются специально для работы в пакетных файлах. Можно ознакомиться с полным перечнем. Для этого предполагается получить доступ к командной строке. Это можно сделать через Пуск > Выполнить > CMD.

Предусматривается несколько вариантов получения сведений:

help

Если осуществить ввод указанной команды, можно получить полный список существующих команд и небольшие описания к ним. Разрешается обеспечение более детальных сведений. Чтобы можно было их получить, требуется ввести help и название интересующей команды. В качестве примера рекомендуется указать возможность получения данных по АТ:

help AT

Результатом необходимо назвать выдачу перечня ключей для осуществления запуска указанной команды из пакетного документа. В данном плане Windows предоставляет гораздо более широкие возможности, чем DOS. Одним из примеров расширенного функционала требуется назвать открытие файла логов деятельности пакетного доку

start название_документа.txt

Если осуществить запуск подобной команды, то произойдет открытие название_документа.txt. Важным моментом является тот факт, что пакетный файл окончит свою деятельность. Использование подобного метода является оправданным в тех случаях, когда объемы лог-файла невелики.

Создание BATCH файла

Следует открыть программу «Блокнот» и в ней провести набор указанных далее строк:

@echo This batch file

@pause

После этого требуется выполнить сохранение в качестве файла 1.bat. Следующим этапом таких мероприятий, следует провести открытие пакетного документа. Это повлечет за собой выдачу строк:

This batch file

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

Когда предложение будет исполнено, произойдет закрытие пакетного документа, поскольку его работа завершается. Отдельное внимание должно уделяться этому символу — @. Он задает выдачу исключительно результата работы, а не непосредственно команды. Вы можете осуществить несколько экспериментов, связанных с изменением положения или удаления данного символа. Это позволит лучше понять особенности его использования.


Cmd — Пакетная обработка

Далее кратко описаны полезные возможности, которые можно использовать в командных файлах (*.bat;*.cmd aka батники) операционных систем Windows 2000, XP, 2003 и более поздних.

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

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

Более подробную помощь нежели в данном обзоре можно найти в стандартной справке в каталоге Windows.
(Типичный путь к файлу справки: C:\WINDOWS\Help\ntcmds.chm. Если Windows установлена в каталог, отличный от C:\WINDOWS, то ссылки на справку из данной страницы работать не будут. Потребуется открыть справку самостоятельно.)
В частности, крайне полезно почитать следующие разделы:

Справку по конкретной команде также всегда можно получить набрав в командной строке » /?«.
Например, очень познавательно почитать то, что выдается в результате команд set /?, call /?, for /?, if /?.

Цукерберг рекомендует:  Обучение - ru.wix.com станет ли конкурентом для web разработчика

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

Вывод
Текущий каталог
Параметры вызова сценариев

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

Параметр Значение
%0 d:\delta\lngs\compile_all.cmd
%1 sol.dpr
%2 . (точка)
%3,%4,%5 и т.д. (пусты)
%* sol.dpr .

Современные ОС используют расширенный режим обработки параметров, в котором доступны следующие модификаторы:

Модификатор Описание
расширение %1 и удаление любых кавычек («»)
замена %1 полным путем
замена %1 именем диска
замена %1 путем без диска и имени файла
замена %1 именем файла без расширения
замена %1 расширением имени файла
замена полным путем, содержащим только короткие имена
замена %1 атрибутами файла
замена %1 датой и временем модификации файла
замена %1 размером файла
Поиск в каталогах, перечисленных в переменной среды PATH, замена %1 полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

Описанные модификаторы можно применять в различных сочетаниях для всех параметров. Например:

Модификатор Описание
полный путь (включая завершающий слэш) к каталогу выполняемого скрипта
имя файла первого параметра с расширением
размер файла второго параметра
замена %1 строкой, аналогичной результату работы программы dir

Проверка условий

Проверка существования файла:
if [not] exist имя_файла команда [else выражение]
Например: if exist $result$.txt del $result$.txt

Проверка кода возврата:
if [not] errorlevel число команда [else выражение]
Условие верно, если предыдущая обработанная команда завершилась с кодом, равным или большим значения число.
Например:

Использование меток

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

Запуск команд

Инструкция «cmd команда» запускает системный пакетный обработчик cmd.exe для выполнения команды команда.
Если вызов происходит из консоли, то используется имеющаяся, если нет — создается новая.
Ключи /c и /k указывают, что по завершении исполнения консоль нужно закрыть или оставить, соответственно.

Инструкция «start команда» запускает обработку команды команда в отдельном параллельном процессе.
Соответствующие ключи позволяют изменять приоритет запускаемого процесса.
Ключ /wait указывает, что запустившему процессу следует дождаться завершения запущенного.

Запускать новые командные сценарии из командных сценариев можно также двумя способами.
Первый: Второй:

Код возврата команд

Команда exit число прерывает исполнение текущего сценария с возвратом запустившему его процессу заданного кода выхода. По умолчанию производится прерывание сразу всей цепочки вызовов пакетных сценариев. Если необходимо завершить только текущий сценарий и возвратить управление в сценарий, вызвавший его командой call, то нужно использовать ключ /b команды exit. Для выхода из сценария с передачей вызвавшему процессу текущего значения %errorlevel% необходимо использовать команду goto :eof.

Некоторые команды всегда устанавливают переменную %errorlevel%, некоторые модифицируют ее только при возникновении ошибок, а некоторые вообще ее никогда не меняют.
Вот пример:

Копирование

Проверить, удачно ли выполнилась команда можно по коду возврата %errorlevel%.

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

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

Символ Синтаксис Определение
& [. ] команда1 & команда2 Выполняется первая команда, затем вторая команда.
&& [. ] команда1 && команда2 Вторая команда выполняется, только если первая была выполнена успешно.
|| [. ] команда1 || команда2 Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).
( ) [. ] ( команда1 & команда2 ) Используется для группировки или вложения команд.
; или , команда1 параметр1 ; параметр2 Используется для разделения параметров команды.

Примечание:
Амперсанд &, вертикальная черта | и скобки () являются специальными символами, которым должен предшествовать управляющий символ ^ или кавычки, если эти символы передаются в качестве аргументов.

Вот пример специализированного скрипта для сравнения файлов:

Использование переменных среды

Глобальные переменные устанавливаются в свойствах операционной системы или специальной внешней утилитой setx и доступны с одними и теми же значениями при запуске всех пакетных файлов.

Локальные переменные устанавливаются и используются по-своему в каждом отдельном сценарии, сохраняются только во время его выполнения, а также передаются в дочерние сценарии при вложенных вызовах.

Псевдопеременные, такие как %CD%, %DATE%, %TIME%, %RANDOM%, %ERRORLEVEL%, обрабатываются особенным образом в зависимости от определенных условий.

В следующей таблице приведен выборочный список наиболее интересных переменных среды.

Переменная Тип Описание
Локальная Возвращает путь к текущей папке.
Системная Возвращает имя компьютера.
Системная Возвращает текущую дату. Использует тот же формат, что и команда date /t .
Системная Возвращает код ошибки последней использовавшейся команды.
Системная Указывает путь поиска для исполняемых файлов.
Системная Возвращает произвольное десятичное число от 0 до 32767.
Системная Возвращает размещение системного каталога Windows.
и Системная и пользовательская Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.
Системная Возвращает текущее время. Использует тот же формат, что и команда time /t .
Локальная Возвращает имя пользователя, выполнившего вход в систему.

При использовании переменных можно также использовать выделение подстрок.

Конструкция Назначение
%PATH:

10,5%

расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины.
%PATH:

-10%

извлечет последние 10 символов переменной PATH
%PATH:

0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних

Для установки значений переменных используется команда set.
Установка значений:
set переменная=значение
Показ значений:
set переменная
Показ значений всех переменных:
set (без параметров)
Проверка наличия переменной с заданным именем:
if defined переменная команда

Вычисление арифметических выражений

В следующей таблице представлены арифметические операторы, поддерживающие параметр /a , в порядке убывания приоритета.

Оператор Действие оператора
() группировка
!

унарные операторы
* / % арифметические операторы
+ — арифметические операторы
> двоичный сдвиг
& двоичное И
^ двоичное исключающее ИЛИ
| двоичное ИЛИ
присваивание
, разделитель операторов

При использовании символов & | % ^ заключайте выражение в кавычки.
Любые нечисловые строки в выражении считаются именами переменной среды, чьи значения преобразуются в числа до обработки. Если указано имя переменной среды, которое не определено в текущем окружении, ей присваивается значение нуля, что позволяет выполнять арифметические операции со значениями переменной среды без использования % для получения значения.

Пример использования вычисления выражений:

Потоки ввода/вывода

Потоки используются в командных сценариях для унифицированного распределения и перенаправления ввода/вывода.

В следующей таблице представлены стандартные потоки.

Поток Номер дескриптора Описание
STDIN Стандартный ввод (только чтение)
STDOUT 1 Стандартный вывод (только запись)
STDERR 2 Вывод ошибок (только запись)

Каждый поток может быть связан с каким-либо устройством ввода/вывода.

В следующей таблице представлены стандартные устройства.

Устройство Описание
CON Консоль (чтение с клавиатуры и вывод на экран)
NUL Пустота
PRN Принтер
В качестве устройств могут также выступать файлы, заданные по имени.
По умолчанию все стандартные потоки связаны с устройством CON.

В следующей таблице описаны операторы перенаправления, применимые к потокам и устройствам.

Оператор перенаправления Описание
> Перенаправление вывода с затиранием.
Перенаправление ввода.
>> Перенаправление вывода с добавлением.
>& Считывает данные на выходе одного потока как входные данные для другого потока.
Считывает входные данные одного потока как выходные данные другого потока.
| Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал».

Некоторые команды, такие как find, sort, more, называются фильтрами, т.к. они занимаются специализированной трансформацией входного потока в выходной.

Далее приведены некоторые примеры.

Типичный вызов при тестировании программистских задач.
(Ввод из input.txt, вывод в output.txt, вывод ошибок в никуда).

Вызов скрипта компиляции с перенаправлением потоков вывода и ошибок на дописывание в файл compile.log.

Дописывание содержимого одного файла в конец другого.

Поэкранный вывод списка элементов текущего каталога.

Поэкранный вывод имен всех фидошников города Гомеля, отсортированных по алфавиту.

Организация циклов

Команда for позволяет произвести запуск некоторой команды для каждого элемента из заданного множества.
Синтаксис:

Параметры: < % переменная | %% переменная >Обязательный параметр. Замещаемый параметр. Используйте % переменная для выполнения команды for из командной строки. В пакетных файлах для команды FOR используется запись %%переменная вместо %переменная. Имена переменных учитывают регистр букв (%i отличается от %I). ( множество ) Обязательный параметр. Задает один или несколько файлов, каталогов, диапазон значений или текстовых строк, подлежащих обработке заданной командой. Скобки являются обязательными. команда Обязательный параметр. Задает команду, которая будет выполнена для каждого файла, каталога диапазона значений или текстовой строки, включенной в указанный параметр ( множество ) . ПараметрыКоманднойСтроки Задает параметры командной строки, которые используются с указанной командой.
Подробнее команда описана в справке. Здесь приведены несколько примеров, иллюстрирующих ее возможности.

Перебор фиксированного множества параметров.

Итерация по файлам.

Итерация по каталогам.

Итерация и разбор файлов

Набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивки его на отдельные строки текста и выделения из каждой строки заданного числа подстрок (в том числе нуля). Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр «options» служит для переопределения заданных по умолчанию правил обработки строк.
Возможные ключевые слова для этого параметра:

Описание
eol=c Задает символ конца строки (только один символ).
skip=n Задает число строк, пропускаемых в начале файла.
delims=xxx Задает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.
Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма m-n задает диапазон, указывающий элементы с m -го по n -ый. Если последним символом строки tokens= является звездочка (*), то размещается дополнительная переменная, в которую помещается остаток строки после разбора последнего элемента.
usebackq Задает возможность использования кавычек для имен файлов в параметре МножествоИменФайлов . Задает исполнение строки, заключенной в обратные кавычки, как команды, а строки в одиночных кавычках — как команды в символьной строке.

Поясняющий пример:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Эта команда обрабатывает файл myfile.txt, пропускает все строки, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i используется для второй подстроки, %j — для третьей, а %k получает все оставшиеся подстроки после третьей. Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки. Для того чтобы использовать двойные кавычки, необходимо использовать параметр usebackq, иначе двойные кавычки будут восприняты как границы строки для обработки.

Синтаксис команды FOR /F также позволяет обработать отдельную строку, с указанием параметра filenameset, заключенным в одиночные кавычки. Строка будет обработана как единая строка из входного файла.

Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующая команда:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.

Еще один пример:

Организация блокировок
Установка цвета консоли

(CopyLeft) Vadim Kopichenko

Команды bat-файлов. Как создать bat-файл? Базовые команды

Bat-файлы Windows являются удобным способом выполнения различных задач на ПК, которым активно пользуются компьютерные умельцы. Они позволяют автоматизировать повседневные задачи, сократить время их выполнения и превратить сложный процесс во что-то посильное рядовому пользователю. В данной статье представлены базовые возможности командных файлов и рекомендации по самостоятельному их написанию.

Автоматизация – это просто

Как создать bat-файл? Для этого нужно выполнить следующие действия:

  1. В любом текстовом редакторе, например, в Notepad или WordPad, создать текстовый документ.
  2. Записать в нем свои команды, начиная с @echo [off], а затем (каждый раз в новой строке) – title [название пакетного скрипта], echo [сообщение, которое будет выведено на экран] и pause.
  3. Сохранить текст в электронном документе с расширением.bat (например, test.bat).
  4. Для запуска следует дважды щелкнуть по только что созданному пакетному файлу.
  5. Чтобы его отредактировать, необходимо кликнуть на нем правой кнопкой мыши и из контекстного меню выбрать пункт «Изменить».

Необработанный файл будет выглядеть примерно так:

title Это ваш первый скрипт bat-файла!

echo Добро пожаловать в сценарий пакетной обработки!

Более подробно о командах bat-файлов и их использовании речь пойдет ниже.

Шаг 1: создание программного скрипта

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

Создание нового текстового документа

Пакетный файл упрощает выполнение на компьютере повторяющихся задач с помощью командной строки Windows. Ниже приведен пример скрипта, отвечающего за отображение на экране некоторого текста. Перед тем как создать bat-файл, следует щелкнуть правой кнопкой мыши на пустом месте в каталоге и выбрать пункт «Создать», а затем «Текстовый документ».

Добавление кода

Двойной щелчок на этом новом текстовом документе откроет принятый по умолчанию текстовый редактор. Можно скопировать и вставить приведенный выше пример кода в текстовую запись.

Сохранение

Вышеупомянутый скрипт выводит на экран текст «Добро пожаловать в сценарий пакетной обработки!». Электронный документ необходимо записать, выбрав пункт меню текстового редактора «Файл», «Сохранить как», а затем указать желаемое имя bat-файла. Его следует завершить расширением .bat (например, welcome.bat) и нажать «ОК». Для правильного отображения кириллицы в некоторых случаях следует удостовериться в правильном выборе кодировки. Например, при использовании консоли русифицированной системы Windows NT документ необходимо сохранить в CP866. Теперь следует дважды щелкнуть на ярлыке bat-файла, чтобы активировать его.

Но экране появится надпись:

«Добро пожаловать в сценарий пакетной обработки! Для продолжения нажмите любую клавишу. «

В случае если bat-файл не запускается, пользователи рекомендуют зайти в регистр и удалить ключ:

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

Шаг 2: знакомство с некоторыми командами

Если пользователь ПК знаком с тем, как следует выполнять команды консоли DOS, то он будет мастером создания программных скриптов, потому что это один и тот же язык. Строки в bat-файлах сообщат интерпретатору cmd.exe все, что от него требуется. Это экономит время и силы. Кроме того, есть возможность задать некоторую логику (например, простые циклы, условные предписания и т. д., которые концептуально схожи с процедурным программированием).

Встроенные команды

1. @echo – это команда bat-файлов, которая позволит увидеть работу скрипта в командной строке. Она используется для просмотра хода выполнения рабочего кода. Если у пакетного файла возникают какие-либо проблемы, то данная команда позволит быстро локализировать проблемы. Добавление off дает возможность быстро завершить выполнение кода, избегая вывода ненужной информации на экран.


2. Title предоставляет те же возможности, что и тег в HTML, т. е. создает заголовок для пакетного скрипта в окне командной строки.

3. Call вызывает один bat-файл из другого или подпрограмму внутри одного сценария. Например, функция power вычисляет степень %2 числа %1:

if %counter% gtr 1 (

endlocal & set result=%prod%

4. Cls очищает командную строку. Используется для того, чтобы предыдущий вывод постороннего кода на помешал просмотру хода выполнения текущего скрипта.

5. Color задает цвет шрифта и фона. Например, команда color f9 задает белые буквы на синем фоне. Команда без параметра восстанавливает установки по умолчанию.

6. Echo служит для вывода информации, а также включения (echo on) или выключения (echo off) такого вывода. Например, команда echo. выводит новую строку без точки, а echo . – точку. Без параметров команда выводит на экран информацию о своем текущем статусе – echo on или echo off.

7. Rem обеспечивает ту же функциональность, что и тег > (сдвиг вправо). Логическим оператором отрицания является ! (восклицательный знак). Он изменяет 0 в 1 и ненулевое значение в 0. Оператором комбинирования служит , (запятая), которая позволяет производить большее число операций в одной команде set. Комбинированные операторы присваивания += и -= в выражениях a+=b и a-=и соответствуют выражениям a=a+b и a=a-b. Так же работают и *=, %=, /=, &=, |=, ^=, >>=, >, >=; ,

Литералы можно вводить в виде десятичных, шестнадцатеричных (с ведущими 0x) и восьмеричных чисел (с ведущим нулем). Например, set /a n1=0xffff присваивает n1 шестнадцатеричное значение.

Внешние команды

  • Exit используется для выхода из консоли DOS или (с опцией /b) только текущего bat-файла или подпрограммы.
  • Ipconfig – это классическая консольная команда, которая выводит информацию о сети. Она включает MAC- и IP-адреса, и маски подсети.
  • Ping пингует IP-адрес, отправляя к нему пакеты данных, чтобы оценить его удаленность и время ожидания (отклика). Также используется для задания паузы. Например, команда ping 127.0.01 –n 6 приостанавливает выполнение кода на 5 с.

Библиотека команд bat-файлов огромна. К счастью, в Сети есть множество страниц, в которых все они перечислены, наряду с переменными пакетного скрипта.

Шаг 3: запись и запуск bat-файла

Следующий скрипт намного упростит ежедневную онлайн-активность. Что делать, если есть желание мгновенно открыть все свои любимые новостные сайты? Поскольку скрипты используют команды консоли, то можно создать сценарий, который открывает каждую новостную ленту в одном окне браузера.

Далее следует повторить процесс создания bat-файла, начав с пустого текстового документа. Для этого необходимо щелкнуть правой кнопкой мыши на пустом месте в какой-либо папке и выбрать пункт «Создать», а затем – «Текстовый документ». После открытия файла требуется ввести следующий скрипт, который запускает основные русскоязычные средства массовой информации, доступные в Интернете:

Данный скрипт содержит команды start “”, которые открывают несколько вкладок. Можно заменить предложенные ссылки любыми другими на выбор. После ввода скрипта следует зайти в меню редактора «Файл», а затем в «Сохранить как. » и записать документ с расширением .bat, изменив параметр «Тип файла» на «Все файлы» (*. *).

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

Организатор

Если загружать по несколько файлов в день, то в скором времени в папке «Загрузки» их скопятся сотни. Можно создать скрипт, который упорядочит их по типу. Достаточно поместить .bat-файл с программой в папку с неорганизованными данными и дважды щелкнуть для запуска:

rem Каждый файл в папке

rem проверить на наличие расширения и непринадлежность к данному скрипту

rem проверить наличие папки для каждого расширения, и если ее нет, то создать

rem переместить файл в папку

В итоге файлы в директории «Загрузки» сортируются по папкам, названия которых соответствуют их расширению. Это так просто. Данный пакетный скрипт работает с любым типом данных, будь то документ, видео или аудио. Даже если ПК не поддерживает их, сценарий все равно создаст папку с соответствующей меткой. Если уже есть каталог JPG или PNG, то программа просто переместит туда файлы с данным расширением.

Это простая демонстрация того, на что способны пакетные скрипты. Если какую-то несложную задачу необходимо выполнять снова и снова, будь то упорядочение файлов, открытие нескольких веб-страниц, массовое переименование или создание копий важных документов, пакетный сценарий поможет выполнить утомительную работу за пару кликов.

Cmd — Пакетная обработка

2. ОРГАНИЗАЦИЯ ДИАЛОГА КОМАНДНЫМИ ФАЙЛАМИ CMD

2.1. ВВЕДЕНИЕ В КОМАНДНЫЕ ФАЙЛЫ

Язык оболочки командной строки ( shell language ) в Windows реализован в виде командных (или пакетных) файлов.

Командный файл в Windows — это обычный текстовый файл с расширением bat или cmd , в котором записаны допустимые команды операционной системы (как внешние, так и внутренние), а также некоторые дополнительные инструкции и ключевые слова, придающие командным файлам некоторое сходство с алгоритмическими языками программирования.

Например, если записать в файл deltmp.bat следующие команды:

и запустить его на выполнение (аналогично исполняемым файлам с расширением com или exe ), то мы удалим все файлы во временной директории Windows .

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

Вывод сообщений и дублирование команд

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

можно отключить дублирование команд, идущих после нее (сама команда ECHO OFF при этом все же дублируется). Например,

REM Следующие две команды будут дублироваться на экране …

REM А остальные уже не будут

Для восстановления режима дублирования используется команда ECHO ON . Кроме этого, можно отключить дублирование любой отдельной строки в командном файле, написав в начале этой строки символ @, например:

В пакетном файле можно выводить на экран строки с сообщениями.

Делается это с помощью команды

Команда ECHO . (точка должна следовать непосредственно за словом » ECHO «) выводит на экран пустую строку.

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

Используя механизм перенаправления ввода/вывода (символы > и >>), можно направить сообщения, выводимые командой ECHO , в определенный текстовый файл.

ECHO Привет ! > hi.txt

ECHO Пока ! >> hi.txt

REM Попытка копирования

XCOPY C:\PROGRAMS D:\PROGRAMS /s

REM Добавление сообщения в файл report.txt в случае

REM удачного завершения копирования

IF NOT ERRORLEVEL 1 ECHO Успешное копирование >> report . txt

Для того , чтобы вручную прервать выполнение запущенного bat -файла, нужно нажать клавиши Ctrl >+ или Ctrl >+ Break >.

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

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

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

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

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

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

Проверка существования заданного файла/каталога

IF [ NOT ] EXIST файл команда1 [ ELSE команда2]

Условие считается истинным, если указанный файл/каталог существует. Кавычки для имени файла не требуются.

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

IF EXIST 1.ТХТ GOTO TP

ECHO Файл 1.ТХТ не существует

IF NOT EXIST E:\ 1200 MD E:\1200

IF EXIST 1. ТХТ (TYPE 1. ТХТ ) ELSE (COPY CON 1. ТХТ )

2.2. КОМАНДНЫЕ ФАЙЛЫ СЛОЖНОЙ СТРУКТУРЫ

Использование параметров командной строки

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

Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или %*. При этом вместо %0 подставляется имя выполняемого пакетного файла, вместо %1, %2, …, %9 — значения первых девяти параметров командной строки соответственно, а вместо %* — все аргументы. Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то «лишние» переменные из %1 – %9 замещаются пустыми строками.

Рассмотрим следующий пример.

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

ECHO Файл %0 копирует каталог %1 в %2

Если запустить его из командной строки с двумя параметрами, например

copier.bat C:\Programs D:\Backup

то на экран выведется сообщение

Файл copier.bat копирует каталог C:\Programs в D:\Backup

и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.

При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT , которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий , то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9. Если же такой параметр не задан, то новое значение %9 — пустая строка.

В командных файлах имеются некоторые возможности синтаксического анализа заменяемых параметров. Для параметра с номером n (%n) допустимы синтаксические конструкции (операторы), представленные в таблице.

Операторы для заменяемых параметров

Переменная %n расширяется до полного имени файла

Из переменной %n выделяется только имя диска

Из переменной %n выделяется только путь к файлу

Из переменной %n выделяется только имя файла

Из переменной %n выделяется расширение имени файла

Значение операторов N и X для переменной %n изменяется так, что они работают с кратким именем файла

Проводится поиск по каталогам, заданным в переменной среды PATH , и переменная %n заменяется на полное имя первого найденного файла. Если переменная PATH не определена или в результате поиска не найден ни один файл, эта конструкция заменяется на пустую строку.

Данные синтаксические конструкции можно объединять друг с другом, например:

DPn — из переменной %n выделяется имя диска и путь,

NXn — из переменной %n выделяется имя файла и расширение.

Рассмотрим следующий пример. Пусть мы находимся в каталоге C:\TEXT и запускаем пакетный файл с параметром Рассказ.doc (%1=Рассказ.doc). Тогда применение операторов, описанных в таблице, к параметру %1 даст следующие результаты:

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

Проверка значения переменной

Первый тип условия используется обычно для проверки значения переменной. Для этого применяются два варианта синтаксиса команды 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 Привет, Петя!

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

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

IF %1/==/ GOTO ExitLoop

ECHO Входной параметр не задан

Ключ /I, если он указан, задает сравнение текстовых строк без учета регистра.

Проверка кода завершения предыдущей команды

Еще один способ использования команды IF — это проверка кода завершения (кода выхода) предыдущей команды.

IF [ NOT ] ERRORLEVEL число команда 1 [ ELSE команда2]

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

Составим, например, командный файл, который бы копировал файл my.txt на диск C: без вывода на экран сообщений о копировании, а в случае возникновения какой-либо ошибки выдавал предупреждение:

REM Проверка кода завершения копирования

IF ERRORLEVEL 1 GOTO ErrOccurred

ECHO Копирование выполнено без ошибок.

ECHO П ри выполнении команды XCOPY возникла ошибка!

Пакетная обработка строк

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

Я в основном пытаюсь вытащить имя общего ресурса профиля в цикл for, прочитать имена всех подкаталогов этого общего ресурса, перетащить эти строки в другой цикл, который только читает последнее имя папки в пути, а затем обрезает последнюю 5 символов имени папки (что не случайно является именем пользователя)

То, что я ожидаю увидеть, выглядит примерно так:

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих