Главная | Контакты | Случайная статья
It is possible to create a markdown output without highlight (no language given)
set -x
exe() { echo "\`\$\$ ${@/eval/} \`" ; "$@" ; } Вывод на экран сообщения или задание режима вывода на экран сообщений команд. Вызванная
без параметров команда echo выводит текущий режим.
Вывод на экран сообщения или задание режима вывода на экран сообщений команд. Вызванная
без параметров команда echo выводит текущий режим.


- A system running Linux
- Access to the terminal window/command line
Общие сведения о командных файлах.
Использование переменных окружения.
Передача параметров командному файлу.
Переходы и метки.
Примеры использования командных файлов:
– Создание пустых файлов
– Присвоение съемному диску одной и той же буквы.
– Создание поколений архивов по датам и времени.
– Создание архивов – более сложный вариант.
– Выполнение команд по расписанию.
– Запуск и остановка служб.
– Выдача на экран значения ERRORLEVEL.
– Диалог с пользователем.
– Задержки в командных файлах.
– Поиск в локальной сети компьютеров с запущенным приложением.
– Поиск компьютеров с запущенным приложением по списку.
– Выключение компьютеров по списку, созданному на основе сетевого окружения.
– Работа с оконными приложениями.
Типовые ошибки при написании командных файлов.
Использование командных файлов в сценариях регистрации.
I’ve come up with a cool script that will produce the output that I need, but it only displays on the screen, so I have to copy, then paste in the commands to get them to execute. Here’s the abbreviated version of my script:
#!/bin/bash
runc=/etc/csf/csf.pl -d
for IP in `tail -400 iptext.txt`
do
cc=`geoiplookup $IP`
echo -e $runc $IP $cc | grep Algeria
echo -e $runc $IP $cc | grep Argentina
echo -e $runc $IP $cc | grep Armenia
echo -e $runc $IP $cc | grep Azerbaijan
echo -e $runc $IP $cc | grep Bolivia
echo -e $runc $IP $cc | grep Brazil
doneOkay, so it loops through the list of IP addresses in iptext.txt, then does a geoIP lookup on each, if (in this example) there are two geoIP matches in the list, let’s say for Armenia and Brazil, I will see output like this to the shell window:
/etc/csf/csf.pl -d 46.162.242.17 GeoIP Country Edition: AM, Armenia
/etc/csf/csf.pl -d 200.147.38.50 GeoIP Country Edition: BR, BrazilСинтаксис
echo [{on|off}] [сообщение]
Создание файлов.
В Windows нет специальной команды для создания файла, но без нее можно легко обойтись несколькими способами:
COPY CON myfile.txt
При выполнении этой команды данные с клавиатуры (устройство CON) будут заноситься в файл myfile.txt. Нажатие клавиши F6 или комбинации CTRL-Z завершит вывод.
При выполнении этой команды будет создан файл myfile.txt, содержащий символ “1”
COPY CON > myfile.txt < xyz
При выполнении этой команды, как и в первом случае, используется копирование
с консоли в файл, но вместо данных с клавиатуры используется ввод с
несуществующего устройства xyz. Система выдаст сообщение, о том, что такого устройства
не существует, но пустой файл myfile.txt будет успешно создан.
Совсем простой вариант – копирование с фиктивного устройства с именем nul
в файл.
copy nul myfile.txt
Если вам часто приходится создавать пустые файлы, можно подготовить свой
командный файл (например – newfile.bat или, что еще лучше, – nf.bat),
а имя создаваемого файла передавать ему в качестве параметра при запуске.
copy nul %1
Поместите этот командный файл в системный каталог
(C:\windows\system32) или любой другой, имеющийся в путях поиска,
задаваемых переменной PATH).
Таким образом, мы получили команду nf для создания пустого файла в
командной строке Windows.
Присвоение съемному диску одной и той же буквы.
Задача заключается в том, чтобы съемный USB диск (флэш диск) был доступен
всегда под одной и той же буквой, независимо от того, на каком компьютере он используется
и как он подключен. Для ее решения воспользуемся уже упоминаемой выше командой SUBST.
Выберем для съемного диска желаемую букву, например – X. Имя диска, с которого
был запущен командный файл доступно как переменная %~d0. Создаем командный файл
следующего содержания:
subst X: %~d0\
что означает – создать виртуальный диск X:, которому сопоставлен
физический диск, откуда был выполнен запуск командного файла.
Дополнительное представление о подстановочных значениях
переменной %0 можно получить из командного файла следующего
содержания:
Создание поколений архивов по датам и времени.
Решим следующую задачу – нужно создать архив файлов, находящихся в каталоге
C:\Program Files\FAR. Имя архивного файла должно состоять из текущего времени
(часы.минуты.секунды – ЧЧ.ММ.СС.rar), и помещен он должен в новый каталог, имя которого должно состоять из текущей даты
(день.месяц.год – ДД.ММ.ГГГГ). Для архивирования будем использовать архиватор RAR.
Формат запуска для создания архива:
RAR a -r < путь и имя архива > < Путь и имя архивируемых данных >
a – параметр, задающий добавление файлов в архив (для создания архива).
-r – параметр, определяющий архивирование подкаталогов (т.к. в исходной папке есть подкаталоги).
Таким образом, для решения задачи нужно правильно создать имена и пути для RAR. Для чего
воспользуемся следующими факторами:
Как правило, причиной является тот факт, что на момент выполнения вашего командного файла переменные среды могут быть совсем другими, чем на момент его написания и запуска из командной строки. Например, в командном файле используется запуск приложения myprog.exe, находящегося в каталоге SCRIPTS на диске D: . Если в командном файле используется имя модуля без полного пути
и если каталог D:\SCRIPTS не прописан в путях поиска (переменная PATH ) то модуль MYPROG.EXE может быть найден и выполнен только если текущим каталогом является D:\SCRIPTS. Но если вы укажете полный путь к myprog.exe
То программа будет найдена и выполнена в любом случае.
Есть еще одна тонкость – нередко программа, указанная в командном файле использует для поиска своих компонент (dll, ini и т.п. ) собственный каталог. Но на момент ее выполнения текущим каталогом может быть любой (чаще всего – системный каталог Windows). Естественно, компоненты не находятся и программа не выполняется. Для устранения проблемы добавьте в командный файл команды, обеспечивающие переход в нужный каталог. Например, программа myprog.exe должна выполняться в каталоге D:\SCRIPTS:
Rem Сменим текущий диск
Rem перейдем в каталог SCRIPTS
Прием со сменой каталога наиболее универсален и, как правило, всегда срабатывает.
Причина в том, что при создании командных файлов вы
использовали текстовый редактор, в котором русские символы представлены
не в DOS-кодировке. Если в приведенном выше примере перезапуска службы “DNS-клиент”
вы используете неверную кодировку, то русская часть имени службы не будет опознана
из-за неверной кодировки и будет выдано сообщение, что указанная служба не
установлена. Чтобы избежать проблем с русскими символами в командных файлах,
используйте редактор с поддержкой DOS-кодировки, например, встроенный редактор
файлового менеджера FAR.
Переключение между кодировками в редакторе осуществляется нажатием F8 .
С помощью FAR можно легко осуществлять перекодировку, скопировав (вырезав) текст в буфер обмена, затем
нажав F8 и вставив текст из буфера.
Обычно это вызвано применением в командных файлах абсолютных значений вместо
переменных среды окружения. Вместо C:\WINDOWS правильнее использовать %SYSTEMROOT%, потому,
что на другом компьютере система может быть установлена в другой каталог или на другой диск.
Старайтесь вместо имени командного файла использовать переменную %0 и ее
подстановочные
варианты (%~d0 – диск с которого запущен сценарий, %~dp0 – полный путь и т.д.).
Строки с переменными, принимающими значения имен файлов и каталогов лучше
заключать в кавычки. Командная строка
DIR %ProgramFiles%
не выдаст вам содержимого каталога C:\Program Files , поскольку из-за наличия пробела будет
интерпретирована как
DIR C:\Program
Командная строка
DIR “%ProgramFiles%”
выполнится верно.
Старайтесь использовать команды Setlocal и Endlocal, чтобы не оставлять мусор
из переменных, созданных или модифицированных командным файлом.
<br
Использование командных файлов в сценариях регистрации
пользователей .
Командные файлы удобно использовать для выполнения каких-либо
действий при регистрации пользователя в
домене. Делается это с помощью вкладки “Profile”
свойств пользователя домена.

Сами командные файлы скриптов должны
находиться в сетевой папке Netlogon (Windows\ Ssysvol\ Domain\ Scripts , для Win2k –
WINNT\SYSVOL \ DOMAIN \ SCRIPTS) контроллера
домена, доступ на чтение к которой должен
быть у всех пользователей, проходящих
регистрацию.
Страницы близкой тематики:
Список команд,
используемых в командной строке Windows. . – Перечень команд CMD Windows и краткая справка с примерами
Работа с сетью в командной строке – Примеры использования командной строки для диагностики сетевых проблем, анализа состояния и настроек сетевых устройств.
Настройка командной строки Windows – Примеры настроек приложения командной строки.
Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой “Поделиться”
</br
Символы и команды по управлению командными файлами
Пример 2: Внесём изменения в ранее созданный командный файл:
COPY D:\*.DOC D:\DOCUMENT
COPY D:\*.TXT D:\TEXT
Команда ЕСНО также позволяет выдавать из командного файла сообщения на экран:
Синтаксис: ЕСНО сообщение
Пример 3: Текст командного файла K1.BAT:
С: (замените на нужный диск)
Данный командный файл выполняет следующие действия: очищает экран; переходит на диск С; переходит в корневой каталог; выдает на экран содержимое корневого каталога.
Синтаксис: REM любые_символы
Команда CALL. Предназначена для вызова одного командного файла из другого с последующим возвратом в точку вызова.
PAUSE просмотрим файл
Пример 5: Пусть необходимо создать командный файл cop.bat для копирования файла из папки NAME1 в папку NAME2
COPY D:\NAME1\%1 D: \NAME2
Запустить его на выполнение можно строкой (для работы данного командного файла, необходимо запустить файл через командную строку):
При выполнении этого командного файла символ %1 (формальный параметр) будет заменен на значение первого параметра при вызове командного файла, т.е. вместо %1 будет подставлено primer.txt и будет выполнена команда
COPY D:\NAME1\primer.txt D: \NAME2
1. Создайте командный файл, выполняющий следующий алгоритм:
– создать на диске С:\ папку RPK;
– создать в папке RPK папку Students;
– в папке студенты создать папку 2B;
– в папке 2B создать текстовый файл с именем ivanov.txt;
– скопировать данный файл в папку RPK;
– переименовать в папке RPK файл ivanov.txt на petrov.txt;
– удалить из папки 2B файл ivanov.txt;
– вывести на экран сообщение: «Командный файл создал студент ваша фамилия ».
3. Создайте свой командный файл (минимальное количество команд – 5).
2.2 Синтаксис специальных команд пакетной обработки
Все команды пакетной обработки являются внутренними командами.
1. Команда: CALL
Назначение: вызывает пакетный файл из другого пакетного файла.
filenames – имя вызываемого КФ;
parameters – параметры,передаваемые вызываемому КФ;
CALL – вызов КФ из текущего каталога.
2. Команда: FOR
Назначение: циклическое выполнение команды.
Формат: FOR %%var IN (set) DO command
var – имя переменной, возможные значения от A до Z;
set – список имен или текстовых строк, которые должны быть подставлены в цикле на место %%var;
command – выполняемая команда.
FOR %%E IN (A,B,C) DO DEL %%E.OBJ – удаление из текущего каталога файлов A.OBJ, B.OBJ и C.OBJ.
3. Команда: GOTO
Назначение: передача управления на строку КФ, следующую за заданной меткой.
Формат: GOTO label
label – метка строки, на которую передается управление.
GOTO END – переход на указанную метку.
4. Команда: IF
Назначение: условное выполнение команд.
а) для проверки значения глобальной переменной ERRORLEVEL
б) для сравнения двух символьных строк
в) для проверки существования заданного файла
value – целое число в диапазоне от 0 до 255;
command – выполняемая команда;
string1,string2 – текстовые строки.
б) IF ERRORLEVEL 1 GOTO END – переход на метку END, если значение ERRORLEVEL больше или равно 1.
5. Команда: PAUSE
Назначение: реализация паузы при выполнении КФ.
comment – текстовая строка.
PAUSE Да, да, да, это пауза – пауза с выдачей сообщения на экран.
6. Команда: REM
Назначение: ввод комментария.
comment – строка коммантария.
7. Команда: SHIFT
Назначение: сдвиг значений параметров командной строки запуска КФ на одну позицию влево.
8. Команда CHOICE
Выводит пользователю заданную подсказку для выбора командного файла. Ждет, пока пользователь выберет из указанного набора клавиш. Эту команду можно использовать только в командных файлах.
Параметр “текст” задает текст, который вы хотите выводить перед подсказкой. Вопросительный знак необходим только в том случае, если вы включаете в текст перед подсказкой символ /. Если вы не задаете текст, CHOICE выводит на экран только подсказку.
Параметр /N приводит к тому, что CHOICE не выводит подсказку. Однако текст перед подсказкой выводится. При задании /N указанные клавиши все равно будут доступны.
/S приводит к различимости в CHOICE регистра символов. Если параметр /S не задан, то для любых заданных пользователем клавиш будет восприниматься как верхний, так и нижний регистр.
Первая назначенная вами клавиша возвращает значение 1, вторая – 2, третья – 3 и т.д. Если пользователь нажимает клавишу, отсутствующую в списке назначенных клавиш, то CHOICE дает предупреждающий звуковой сигнал (передает на консоль символ 07h).
Если CHOICE обнаруживает состояние ошибки, то возвращает значение 255. Если пользователь передает CTRL+BREAK или CTRL+C, CHOICE возвращает значение, равное 0. Например, если в командном файле вы указываете команду:
то пользователь видит следующее:
Если вы добавите:
choice /c:ync Yes, No, or Cancel
то пользователю выводится:
Если вы зададите команду:
choice /c:ync /t:n,7
то пользователь видит на экране:
Если по истечении 7 секунд пользователь не нажмет клавишу, CHOICE выбирает N и возвращает значение ERRORLEVEL 2. При нажатии соответствующей клавиши до истечения 7 секунд CHOICE возвращает значение, соответствующее выбору пользователя.
2.3 Передача данных в командный файл
Довольно часто возникает необходимость создать один КФ, но выполнять его каждый раз с различными данными. Возможны два способа передачи данных в КФ: а) с помощью списка параметров, б) с помощью глобальных переменных.
<имя КФ> <параметр1> <параметр2>.. <параметр9>
При выполнении КФ формальный параметр %1 получает значение <параметр1>, формальный параметр %2 получает значение <параметр2> и т.д. В формальном параметре %0 хранится имя КФ.
Операционные системы MS DOS и Windows позволяют создавать КФ, у которых число фактических параметров превышает 10. Для этого необходимо воспользоваться командой SHIFT. Символ “%” можно использовать в командах внутри КФ. Для этого необходимо в тексте КФ повторить его дважды. Например, имя файла f%.exe должно выглядеть как f%%.exe.
При использовании второго способа (глобальных переменных) перед запуском КФ в области окружения ОС с помощью команды SET необходимо создать глобальные переменные и присвоить им заданные значения. Имена этих переменных при использовании в командах КФ заключаются в символы “%” (например, %FILE%). При выполнении КФ операционная система извлекает соответствующие значения переменных из области окружения.
3. Последовательность выполнения работы
1. Измените приглашение DOS таким образом, чтобы в нем отражались:
– текущее время,
– текущая дата.
2. Создайте командный файл mb2.bat следующего содержания:
Запустите данный файл, который выполняет следующие действия: очистку экрана, включение вывода протокола выполнения командного файла, переход на диск С, переход в корневой каталог. Отразить данные в отчете.
3. Внесите изменения в командный файл mb2.bat в соответствии с таблицей:
Отразите изменения в отчете.
4.Создайте и выполните командный файл mb3.bat следующего содержания:
Результат работы отобразить в отчете.
5. Создайте и выполните командный файл следующего mb4.bat содержания:
Результат работы отобразить в отчете.
6. Создать командный файл, который выполнял бы следующие действия: при вызове с параметром 1 – создавал каталог NEW, с параметром 2 – выводил информацию о текущем каталоге, с параметром 3 – информацию о версии системы (необходимую команду найти в справочной системе DOS), с любым другим параметром – фразу “Command not defined”. Результат работы отобразить в отчете.
7. Создать командный файл, который бы выводил на экран все файлы с расширением *txt. Если файл запускается без параметров, то вывести “Didn’t enter parameter!”. Если в папке нет файлов с таким расширением, то вывести «Files of this type don’t exist!» Результат работы отобразить в отчете.
8. Создать командный файл, который выполнял бы следующие действия: при вызове с параметром, равным 1 – создавал файл infolab1.txt в текущем каталоге, с параметром, равным 2 – выводил краткую информацию о текущем каталоге, с параметром, равным 3 – информацию о версии системы, с любым другим параметром – фразу “Command not defined”. Результат работы отобразить в отчете.
9. Создать командный файл, при вызове которого указать наименование валюты. Если указано «доллар», то на экран выводится сообщение о курсе доллара, если «евро», то вывести соответствующий курс евро. Для всех других вариантов вывести сообщение «Валюта не идентифицирована». Результат работы отобразить в отчете.
10. Для записи в текстовый файл информации о студентах Вашей группы создать КФ WRITE_FD.BAT со следующей программной функцией:
· отключить эхо-сопровождение;
· очистить экран;
· если не заданы параметры запуска КФ, то идти на метку HELP, иначе записать значения параметров запуска в файл и идти на конец;
· метка HELP;
· информировать пользователя о структуре и содержании полей записи в файле данных и синтаксисе команды, например:
WRITE_FD <ФИО> <ГОД РОЖД> <МЕСТО РОЖД> <ПОЛ>
11. Отладить КФ WRITE_FD.BAT. Ввести в файл данных 10 записей. Записать их в протокол.
12. Написать КФ FIND_FD.BAT для поиска информации в файле данных по заданному признаку:
· отключить эхо-сопровождение;
· чистить экран;
· если параметр запуска не задан, то идти на метку HELP, иначе искать записи в файле данных, содержащие заданную параметром запуска строку символов (ключ),и вывести их на экран, идти на конец;
· метка HELP
· информировать пользователя о синтаксисе запроса, например:
FIND_FD <строка символов>, где <строка символов> определяет фамилию, год рождения, место рождения или другую информацию из файла данных.
13. Отладить КФ FIND_FD.BAT. Реализовать несколько запросов на поиск информации в файле данных по различным полям записей, занести результаты в протокол.
14. Написать КФ SORT_FD.BAT для сортировки файла данных по алфавиту, со следующей программной функцией:
· отключить эхо-сопровождение;
· очистить экран;
· провести информирование пользователя;
· сортировать записи файла данных по алфавиту, результат записать во временный файл;
· скопировать временный файл в файл данных;
· удалить временный файл.
· Запустить Pascal
· Перейти в корневой каталог
16. Составьте командный файл, который выводит на экран меню, состоящее из трех пунктов, с поясняющим текстом согласно номеру варианта и выполняет задания, указанные в поясняющем тексте. Работа с файлами
а) создание файла,
б) переименование файла,
в) удаление файла.
4. Контрольные вопросы
4.1 Отличие КФ от других исполняемых файлов.
4.2 Способы передачи данных в КФ.
4.3 Специальные команды КФ.
4.4 Организация ветвлений в КФ.
Параметры
- {on|off}
- Включение или отключения режима отображения на экране информации о работе команд.
- сообщение
- Задание текста для вывода на экран.
- /?
- Отображение справки в командной строке.
Примеры
Следующий пример представляет собой пакетный файл, выводящий сообщение из трех строк на
экран с пустыми строками до и после него:
При выводе русских букв необходимо помнить о кодировке.
Текст сообщения должен быть в DOS (866) кодировке.
Многие текстовые редакторы его поддерживают.
Если необходимо, что бы текст сообщений был в WIN (1251)
кодировке и был виден из любого редактора, то можно
использовать следующий прием.
Такие сообщения для удобства можно выделить в отдельный блок.
Если такой блок неудобно располагать в начале файла, то можно
образовать из него процедуру, разместить в конце bat файла,
а на исполнение вызвать эту процедуру командой call в начале bat файла.
Из примера все должно стать понятнее))
Если сообщение одиночное, то можно
поступить следующим образом:
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума
этого сайта (требуется регистрация).
Новый раздел о средствах командной строки в рамках этого же проекта расположен
здесь
Передача параметров командному файлу.
Командная оболочка предполагает возможность передачи командному файлу некоторых параметров командной строки и использования их значений в соответствии с логикой выполняемого алгоритма.
При обработке командной строки, первый параметр будет доступен как переменная %1,
второй – %2 и т.п. Имя самого командного файла доступно как переменная %0.
Для примера создадим командный файл, задачей которого будет выдача на экран значений введенных параметров. Обычно для вывода
текста используется команда
В качестве элементов текста могут использоваться значения параметров командной
строки. Например, если в текст добавить %1, – то будет выдан первый параметр,
%2 – второй и т.д.
Простейший пример – командный файл, например, с именем param.bat следующего содержания:
param.bat FIRST second “two words”
Обратите внимание, что параметр, содержащий пробел, заключен в двойные кавычки.
REM< пробел > текст
REM будет выводиться только результат их выполнения.
Синтаксис
echo [{on|off}] [сообщение]
Примеры
Следующий пример представляет собой пакетный файл, выводящий сообщение из трех строк на
экран с пустыми строками до и после него:
Если вывод необходимо сделать в файл, то следует использовать
операторы перенаправления команд.
В рамках этого проекта можно ознакомиться с этим на странице
Использование операторов перенаправления команд.
При выводе русских букв необходимо помнить о кодировке.
Текст сообщения должен быть в DOS (866) кодировке.
Многие текстовые редакторы его поддерживают.
Если необходимо, что бы текст сообщений был в WIN (1251)
кодировке и был виден из любого редактора, то можно
использовать следующий прием.
Такие сообщения для удобства можно выделить в отдельный блок.
Если такой блок неудобно располагать в начале файла, то можно
образовать из него процедуру, разместить в конце bat файла,
а на исполнение вызвать эту процедуру командой call в начале bat файла.
Из примера все должно стать понятнее))
Если сообщение одиночное, то можно
поступить следующим образом:
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать
раздел форума
этого сайта (требуется регистрация).
Команды, используемые в командных файлах
сообщение – текст для вывода на экран.
· Чтобы вывести на экране пустую строку, введите следующую команду:
В пакетной программе передает управление Windows XP в строку, определенную меткой. Когда метка найдена, выполнение продолжается со следующей за ней строки.
метка -Строка в пакетной программе, к которой выполняется переход.
a) Работа с расширениями команды goto
Если расширения команды включены (по умолчанию они включены) и в команде goto используется метка :EOF, управление будет передано в конец файла текущего пакетного сценария для выхода из него без назначения метки. Когда используется команда goto с меткой :EOF, перед меткой должно быть вставлено двоеточие. Например: goto:EOF
· Использование допустимых значений метки
Метка может включать пробелы, но не может включать другие разделители, такие как точка с запятой или знак равенства. В команде goto используются только первые восемь знаков метки.
· Совпадение меток в пакетных программах
Метка, заданная в команде, должна соответствовать метке в тексте пакетной программы. В Windows NT/2000/XP строка пакетной программы, начинающаяся с двоеточия (:), опознается как метка и не обрабатывается как команда. Если в пакетном файле не содержится заданной метки, программа будет остановлена, а на экран будет выведено следующее сообщение:
Метка не найдена.
Приостанавливает выполнение пакетной программы с выводом сообщения об ожидании нажатия пользователем любой клавиши.
· При запуске команды prompt выводится следующее сообщение:
· Если при работе пакетной программы была нажата комбинация CTRL+C для ее остановки, то на экран будет выведено следующее сообщение:
Если была нажата клавиша Y (подтверждение), пакетная программа будет закончена и управление вернется операционной системе. По этой причине команда pause может быть вставлена перед разделом пакетного файла, который потребуется пропустить. Команда pause приостанавливает выполнение пакетной программы, аналогичное действие можно сделать, нажав комбинацию CTRL+C и Y.
текст – задает строку символов, используемую в качестве комментария.
Параметры командных файлов
Командным файлам из командной строки могут быть переданы аргументы. Аргументы задаются параметрами командной строки после имени файла. Файл Cmd.exe использует переменные с %0 по %9. При использовании пакетных параметров переменная %0 заменяется на имя пакетного файла, а переменные с %1 по %9 — на соответствующие аргументы, напечатанные в командной строке. Для доступа к переменным больше %9 используется команда shift. Параметр %* ссылается на все аргументы, которые передаются пакетному файлу, за исключением параметра %0.
Изменяет положения пакетных параметров в пакетных файлах.
· Использование параметра командной строки shift с расширениями командного процессора
Если расширения командного процессора разрешены (используются по умолчанию), команда shift поддерживает ключ /n, который указывает команде начинать сдвиг с n -го аргумента, где n — число от нуля до восьми. Например:
сдвинет %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 игнорируется.
пакетные_параметры – задает данные командной строки, используемые программой пакетной обработки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %0 до %9) или переменные (например %baud%).
: метка – указывает метку, на которую должно быть передано управление программы пакетной обработки. При использовании команды call с этим параметром создается новый контекст пакетного файла, а управление передается инструкции, следующей за указанной меткой. Когда первый раз встречается конец пакетного файла (после перехода на метку), управление возвращается на инструкцию, следующую за инструкцией call. При втором достижении конца файла выполнение пакетной программы прекращается.
аргументы – задает данные командной строки, которые передаются в новый экземпляр программы пакетной обработки, начинающейся с: метки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %1 до %9) или переменные (например %baud%).
Для вызова программы Checknew.bat из другого пакетного файла в тексте родительского пакетного файла введите следующую строку:
Если родительская пакетная программа принимает два пакетных параметра и требуется передать их в файл Checknew.bat, включите следующую команду в родительскую пакетную программу:
call checknew %1 %2
ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ
Практическая работа № 19. Использование пакетных файлов
Командный (пакетный) файлом – это текстовый файл в MS-DOS, OS/2 или Windows, содержащий последовательность команд, предназначенных для исполнения командным интерпретатором. После запуска пакетного файла, программа-интерпретатор (как правило, COMMAND.COM или cmd.exe) читает его строка за строкой и последовательно исполняет команды.
Пакетные файлы в DOS имеют расширение .BAT; для других операционных систем они могут иметь другие расширения — например, .CMD в Windows NT.
Основная область применения — автоматизация наиболее рутинных операций, которые регулярно приходится совершать пользователю компьютера: например, копирование, перемещение, переименование, удаление файлов; работа с папками; архивация; создание резервных копий баз данных и т. п. Многие вирусы написаны в виде пакетного файла.
Командный файл может содержать любые команды, допустимые в командной строке, вводимой в ответ на приглашение DOS, и запросы на выполнение программ. Кроме того, имеются дополнительные команды, используемые главным образом только в таких файлах.
Командные файлы создаются обычно каким-либо текстовым редактором.
Синтаксис: REM любые_символы
Команда CALL.Предназначена для вызова одного командного файла из другого с последующим возвратом в точку вызова.
Пример 1. Командный файл, который создает две папки и осуществляет копирование файлов:
Пример 2: Внесём изменения в ранее созданный командный файл:
COPY D:\*.DOC D:\DOCUMENT
COPY D:\*.TXT D:\TEXT
Пример 3: Текст командного файла K1.BAT:
С: (замените на нужный диск)
Данный командный файл выполняет следующие действия: очищает экран; переходит на диск С; переходит в корневой каталог; выдает на экран содержимое корневого каталога.
PAUSE просмотрим файл
Пример 5: Пусть необходимо создать командный файл cop.bat для копирования файла из папки NAME1 в папку NAME2
COPY D:\NAME1\%1 D: \NAME2
Запустить его на выполнение можно строкой (для работы данного командного файла, необходимо запустить файл через командную строку):
При выполнении этого командного файла символ %1 (формальный параметр) будет заменен на значение первого параметра при вызове командного файла, т.е. вместо %1 будет подставлено primer.txt и будет выполнена команда
COPY D:\NAME1\primer.txt D: \NAME2
1. Выполните примеры: 1, 2, 3 (создать командные файлы и проверить их работоспособность).
2. Создайте командный файл, выполняющий следующий алгоритм:
– создать на диске С:\ папку RPK;
– создать в папке RPK папку Students;
– в папке студенты создать папку 2B;
– в папке 2B создать текстовый файл с именем ivanov.txt;
– скопировать данный файл в папку RPK;
– переименовать в папке RPK файл ivanov.txt на petrov.txt;
– удалить из папки 2B файл ivanov.txt;
– вывести на экран сообщение: «Командный файл создал студент ваша фамилия».
3. Создайте свой командный файл (минимальное количество команд – 5).
Что такое командный файл?
Для чего используются пакетные файлы?
Какое расширение имеют файлы данного типа?
Как создать командный файл?
Для чего используются параметры? Приведите пример.
Output
Lets take a random keyframe from in.mp4:
$$ kfn=20
$$ kf=3.803792
Lets select keyframe at 3.803792. Here are the timestamps of the all the frames from in.mp4 around this keyframe.
3.720375
3.737083
3.753750
3.770417
3.787125
**3.803792** KF
3.820500
3.837167
3.853833
3.870542
3.887208Синтаксис
echo [{on|off}] [сообщение]
Echo Command Options
/bin/echo --help
-n: Displays the output while omitting the newline after it.-E: The default option, disables the interpretation of escape characters.-e: Enables the interpretation of the following escape characters:- \\: Displays a backslash character (\).
\a: Plays a sound alert when displaying the output.\b: Creates a backspace character, equivalent to pressing Backspace.\c: Omits any output following the escape character.\e: The escape character, equivalent to pressing Esc.\f: The form feed character, causes the printer to automatically advance to the start of the next page.\n: Adds a new line to the output.\r: Performs a carriage return.\t: Creates horizontal tab spaces.\v: Creates vertical tab spaces.\NNN: Byte with the octal value ofNNN.\xHH: Byte with the hexadecimal value ofHH.
Changing the Output Format
echo -e 'Hello, World! \c This is PNAP!'
Note: If you are using the -e option, enter your string enclosed in single quotation marks. This ensures that any escape characters are interpreted correctly.
Use \n any time you want to move the output to a new line:
echo -e 'Hello, \nWorld, \nthis \nis \nPNAP!'
Add horizontal tab spaces by using \t:
echo -e 'Hello, \tWorld!'
Use \v to create vertical tab spaces:
echo -e 'Hello, \vWorld, \vthis \vis \vPNAP!'
Using ANSI escape sequences lets you change the color of the output text:
echo -e '\033[1;37mWHITE'
echo -e '\033[0;30mBLACK'
echo -e '\033[0;31mRED'
echo -e '\033[0;34mBLUE'
echo -e '\033[0;32mGREEN'
Writing to a File
sudo echo -e 'Hello, World! \nThis is PNAP!' >> test.txtIf the specified text file doesn’t already exist, this command will create it. Use the cat command to display the content of the file:
cat test.txt
Note: Using > overwrites the content of the text file with the new string, while >> adds the new string to the existing content.
Displaying Variable Values
echo $USER
Displaying Command Outputs
echo "[string] $([command])[string]: The string you want to include withecho[command]: The command you want to combine with theechocommand to display the result.
For instance, list all the files and directories in the Home directory by using:
echo "This is the list of directories and files on this system: $(ls)"
Переходы и метки.
В командных файлах можно использовать команды условного перехода, меняющие логику их работы в зависимости от выполнения определенных условий. Для иллюстрации приемов использования условных переходов создадим командный файл, целью которого будет присвоение заранее определенной буквы диска для съемных носителей, в качестве которых будут использоваться флэш-диски. Условия таковы – есть 2 флэш-диска, один из которых должен быть виден в проводнике как диск X: а второй – как диск Y: независимо от того, в какой порт USB они подключены и какая буква назначена им системой. Будем считать, что реальные диски могут быть подключены как F: или G: Опознавание дисков будем выполнять по наличию файла с определенным именем (лучше такой файл сделать скрытым в корневом каталоге и назвать его как-нибудь необычно):
Flashd1.let – на первом диске
Flashd2.let – на втором
Таким образом, задача командного файла заключается в том, чтобы проверить наличие на сменных дисках F: и G: файлов Flashd1.let или Flashd2.let и, в зависимости от того, какой из них присутствует, присвоить диску букву X: или Y:
Для поиска файла на диске используем команду IF EXIST:
IF EXIST имя_файла команда
В качестве команды проще всего воспользоваться SUBST, сопоставляющей имя диска и каталог.
SUBST X: C:\ – создает виртуальный диск X:, содержимым которого будет корневой каталог диска C:
Создаем командный файл setXY.bat со следующими строками:
IF EXIST G:\flashd1.let SUBST X: G:\
IF EXIST F:\flashd1.let SUBST X: F:\
IF EXIST G:\flashd2.let SUBST Y: G:\
IF EXIST F:\flashd2.let SUBST Y: F:\
Желательно обойти выполнение SUBST, если виртуальные диски X: и Y: уже созданы, (или удалять их, используя SUBST с параметром –d перед подключением ). Модифицируем командный файл с использованием команды GOTO – передачи управления строке пакетного файла по метке.
Метка должна находиться в отдельной строке и начинаться с двоеточия. Сделаем изменения в нашем командном файле, чтобы не возникало сообщений об ошибке:
REM если не существует X: – то перейдем на метку SETX
IF NOT EXIST X:\ GOTO SETX
REM если существует X: – перейдем на проверку наличия Y:
IF EXIST G:\flashd1.let SUBST X: G:\
IF EXIST F:\flashd1.let SUBST X: F:\
REM если Y: существует – завершим командный файл.
IF EXIST Y:\ GOTO EXIT
IF EXIST G:\flashd2.let SUBST Y: G:\
IF EXIST F:\flashd2.let SUBST Y: F:\
REM выход из командного файла
ERRORLEVEL
В качестве команды в строке командного файла можно использовать также командный файл. Причем, для передачи с возвратом обратно к точке выполнения вызывающего командного файла используется
команда CALL. Создадим командный файл test.bat, следующего содержания:
1.bat
PAUSE
test.bat
test.bat
CALL
Выйти из зацикливания командного файла можно по нажатию комбинации CTRL-Break.
Возможно использование команды CALL для вызова процедуры внутри командного файла.
В этом случае в качестве аргумента используется не имя внешнего файла, а метка:
Script
set -x
exe() { echo "\`\$\$ ${@/eval/} \`" ; "$@" ; }
echo
echo -----------------------------------------------------------
echo # Setup
echo Lets take a random keyframe from in.mp4:
echo
exe eval "kfn=20"
echo
echo "kf=\$(ffprobe -v error -select_streams v -show_frames -print_format csv in.mp4 | grep 'frame,video,0,1' | head -$kfn | tail -1 | perl -pe 's|frame,video,0,1,.*?,(.*?),.*|\1|') "
exe eval "kf=$(ffprobe -v error -select_streams v -show_frames -print_format csv in.mp4 | grep 'frame,video,0,1' | head -$kfn | tail -1 | perl -pe 's|frame,video,0,1,.*?,(.*?),.*|\1|') "
echo
echo Lets select keyframe at $kf. Here are the timestamps of the all the frames from in.mp4 around this keyframe.
echo
exe eval "ffprobe -v error -select_streams v -show_frames -print_format csv in.mp4 | perl -pe 's|frame,video,0,(.*?),.*?,(.*?),.*|\2 \1|' | perl -pe 's|(.*?) 1|\1\tKF|' | perl -pe 's|(.*?) 0|\1|' |grep -A 5 -B 5 --color $kf"
echo
echo Lets compare 2 methods of split: actual losslesscut 3.53.0 and another one
echoEcho Command Syntax
The syntax is:
echo [option] [string]echo Hello, World!
Параметры
- {on|off}
- Включение или отключения режима отображения на экране информации о работе команд.
- сообщение
- Задание текста для вывода на экран.
- /?
- Отображение справки в командной строке.
Использование переменных окружения.
переменные окружения
SET
переменная – имя переменной среды.
строка – строка символов, присваиваемая указанной переменной.
Например, командная строка
отобразит на экране значение переменной time, что будет соответствовать текущему системному времени.
Нередко команда SET используется для модификации уже существующих значений переменных:
SET PATH=C:\myprogs;%PATH% – установить значение переменной PATH равное строке C:\myprogs; и текущему значению этой же переменной. Таким образом, будет изменен путь поиска исполняемых файлов, определяемый значением PATH с добавлением к нему
каталога C:\myprogs в начало списка. При необходимости, можно добавить данный каталог в конец списка:
Для разделения элементов списка каталогов, определяемых переменной PATH, применяется точка с запятой ( ; )
Выполнение команды SET без параметров позволяет отобразить текущие
значения переменных окружения, в виде:
NUMBER_OF_PROCESSORS=1 – количество процессоров
OS=Windows_NT- тип ОС
Path=E:\WINDOWS\system32;E:\WINDOWS; – путь поиска исполняемых файлов.
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.JS;.WSH – расширения для исполняемых файлов.
PROCESSOR_ARCHITECTURE=x86 – архитектура процессора.
PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, AuthenticAMD – идентификатор процессора.
PROCESSOR_LEVEL=6 – уровень (номер модели) процессора.
PROCESSOR_REVISION=0801 – версия процессора.
ProgramFiles=E:\Program Files – путь к папке “Program Files”
PROMPT=$P$G – формат приглашения командной строки $P – путь для текущего каталога $G – знак “>”.
SystemDrive=E: – буква системного диска.
SystemRoot=E:\WINDOWS – каталог ОС Windows.
Некоторые переменные по команде SET не отображаются. Это переменные, значения которых динамически изменяются :
%CD%
%DATE% – Принимает значение текущей даты.
%TIME% – Принимает значение текущего времени.
%RANDOM% – Принимает значение случайного десятичного числа в диапазоне 1 – 32767.
%ERRORLEVEL% – Принимает текущее значение кода завершения задачи ERRORLEVEL
%CMDEXTVERSION% – Принимает значение версии командного процессора CMD.EXE для расширенной обработки команд.
%CMDCMDLINE% – Принимает значение строки, которая вызвала командный процессор.
Для просмотра значения переменной можно использовать следующую команду:
ECHO %переменная%
Примеры
Следующий пример представляет собой пакетный файл, выводящий сообщение из трех строк на
экран с пустыми строками до и после него:
При выводе русских букв необходимо помнить о кодировке.
Текст сообщения должен быть в DOS (866) кодировке.
Многие текстовые редакторы его поддерживают.
Если необходимо, что бы текст сообщений был в WIN (1251)
кодировке и был виден из любого редактора, то можно
использовать следующий прием.
Такие сообщения для удобства можно выделить в отдельный блок.
Если такой блок неудобно располагать в начале файла, то можно
образовать из него процедуру, разместить в конце bat файла,
а на исполнение вызвать эту процедуру командой call в начале bat файла.
Из примера все должно стать понятнее))
Если сообщение одиночное, то можно
поступить следующим образом:
Параметры
- {on|off}
- Включение или отключения режима отображения на экране информации о работе команд.
- сообщение
- Задание текста для вывода на экран.
- /?
- Отображение справки в командной строке.



