- Сообщения
- 7,572
- Реакции
- 6,426
Прежде, чем перейти к изучению языка Windows Batch,
поставим себе логичный вопрос: "А зачем это нужно? И что он может?
Ведь я, скажем, уже умею делать многие вещи на С++."
Batch - это не программа.
Это пакетный файл, который может содержать:
1) список команд, выполняющихся с помощью интерпретатора командной строки (cmd.exe).
2) ссылки на другие программы как консольные, так и GUI с возможностью передачи им ключей запуска и данных в виде аргументов или потока.
3) логику взаимодействия пп.1,2 благодаря потокам ввода/вывода/ошибок запускаемых команд и программ, а также анализу возвращаемых кодов ошибок по завершению их работы.
Общая идея: зачем писать программу, если можно научится пользоваться уже готовым, встроенным в систему функционалом.
Преимущество в своей специфике и направленности использования.
Для каждой задачи подходит свой инструмент. Нужно знать, какой в данный момент наиболее целесообразный.
Более конкретно:
Ниже перечислены только действия, выполнимые родными средствами Batch
и встроенными в Windows утилитами:
В скобках указывается соответствующая команда консоли, которую Вы можете изучить самостоятельно.
Вывод справки по команде:
Работа с файлами:
Резервное копирование (xcopy, robocopy)
Реестр:
WMI, WMIC - инструментарий управления Windows. Заслуживает нескольких отдельных тем!
Сеть:
Работа с простым текстом:
Это в т.ч. широкий спектр вспомогательных утилит из состава Resourse Kit, Support Tools, UnxUtils, Sysinternals Suite.
Если брать в общем. Batch - это искусство:
поставим себе логичный вопрос: "А зачем это нужно? И что он может?
Ведь я, скажем, уже умею делать многие вещи на С++."
В чем преимущества BAT/CMD перед программой EXE ?
Batch - это не программа.
Это пакетный файл, который может содержать:
1) список команд, выполняющихся с помощью интерпретатора командной строки (cmd.exe).
2) ссылки на другие программы как консольные, так и GUI с возможностью передачи им ключей запуска и данных в виде аргументов или потока.
3) логику взаимодействия пп.1,2 благодаря потокам ввода/вывода/ошибок запускаемых команд и программ, а также анализу возвращаемых кодов ошибок по завершению их работы.
Общая идея: зачем писать программу, если можно научится пользоваться уже готовым, встроенным в систему функционалом.
Преимущество в своей специфике и направленности использования.
Для каждой задачи подходит свой инструмент. Нужно знать, какой в данный момент наиболее целесообразный.
Более конкретно:
- Совместимость и универсальность (работают на всех Windows-машинах. Не нужны компиляторы)
- Широкое распространение в администрировании.
- Правильная постановка задачи = выигрыш в скорости как разработки, так и запуска/работы скрипта.
- Открытый исходный (исполняемый) код.
- bat-ов обычно не грызут вирусы-червяки.
- Batch-команду можно выполнить из глагола реестра без необходимости создавать дополнительный файл.
- Тоже касается внедрения Batch кода в язык высокого уровня
- Batch работает с потоками ввода/вывода, и легко может объединять работу нескольких консольных утилит (в отдельных случаях GUI).
- Быстрая фильтрация информации по ключевому слову (команда | find /i "ключ.слово")
- Команду Batch можно очень быстро ввести с клавиатуры и получить на экран результат без необходимости поиска сторонней программы.
Практические задачи.
Наиболее популярны:
Ниже перечислены только действия, выполнимые родными средствами Batch
и встроенными в Windows утилитами:
В скобках указывается соответствующая команда консоли, которую Вы можете изучить самостоятельно.
Вывод справки по команде:
Код:
Команда /?
Работа с файлами:
- Создание пустого файла (set /p=<NUL >File.txt)
- копирование (copy)
- переименование (ren, move)
- удаление (del, erase, rd, rmdir)
- перемещение файлов/папок (из множества папок), по сложным правилам (нумерация, подстановка масок, в зависимости от содержимого, построчное чтение данных и подстановка в другой файл). С протоколированием (на экран), либо дозаписью в файл. (перенаправления >> и >)
- Пакетная обработка нескольких файлов/папок по критериям (имя, расширение) (For, Dir, Forfiles, Where)
- Поиск файла по идентификатору безопасности (fsutil file findbysid)
- Работа с точками соединения NTFS (mklink)
- правами доступа к файлам/папкам (cacls, icacls)
- атрибутами (attrib)
- сравнение файлов (fc)
- построение дерева каталогов (tree)
- фильтрация файлов/папок по атрибутам, расширению, сортировка по размеру, имени, даты создания/модификации ... (dir, forfiles, where)
- Файловые ассоциации (assoc)
- Протоколирование (дозапись в конец файла) (echo Info >> file.txt)
- Слияние файлов (copy /B)
- разметка, изменение размера
- задание метки тома, атрибута "Активный"
- информация о файловой системе и преобразование, свободное место на диске
- просмотр точек монтирования томов (mountvol)
- создание виртуальных ЖД (видео)
- ... и многое... многое...
Резервное копирование (xcopy, robocopy)
Реестр:
- листинг раздела, чтение параметра (reg query)
- создание раздела, параметра, их модификация (reg add)
- изменение прав доступа к ветке (сторонняя Microsoft SubinACL)
- импорт REG и BINARY файлов в реестр (в случае с HKCU - без необходимости в правах)
- сравнение веток (reg compare)
- сохранение ветки в файл (reg export, reg save)
WMI, WMIC - инструментарий управления Windows. Заслуживает нескольких отдельных тем!
Сеть:
- Работа с шарами (net share)
- сетевыми дисками (subst, net use)
- настройка сетевых подключений, Wi-Fi (netsh, rasdial)
- файрвола, задание правил, порты (netsh)
- FTP (ftp.exe)
- информация об открытых по сети файлах (openfiles)
- Построение списка процессов, PID, модулей, занимаемой памяти (tasklist)
- Завершение процессов передачей WM_Close, а также его принудительное завершение (taskkill)
- Работа со службами (Sc query..., Net stop, Net start)
- Построение перечня загруженных в систему драйверов (DriverQuery)
- Регистрация библиотек в тихом режиме с анализом кода ошибки (regsvr32 /S)
- Перезагрузка, завершение работы, выход пользователя (shutdown, logoff)
Работа с простым текстом:
- Построчное чтение файла (For /F)
- Фильтрация строк, содержащих указанное слово (find /i)
- Сокращенный язык регулярных выражений (findstr /R)
- Подсчет кол-ва строк (find /C /V "")
- Разбиение текста на части по указанному разделителю (FOR "Delims=...")
- Получение части строки, начиная с указанной № позииции символа до... (echo %username:~1,3%), либо с конца/начала строки.
- Замена всех указанных слов в тексте на другое слово (set name=%name:слово=замена%)
- Копирование в буфер обмена (echo Text | Clip)
- Сортировка простая в прямом или обратном порядке (Sort)
- Создание подобия массивов (массив, хранимый целиком в "куче")
- Простые арифметические операции + - * целочисленное деление, битовый сдвиг
- Логика через оператор IF: < (LSS), > (GTR), >= (GEQ), <= (LEQ), равно (== или EQL), не равно (NEQ, NOT ... ==). Флаг учета регистра символов.
- Подобие словаря - проверка существует ли переменная (ограничение ключ словаря не может быть пробелом) (IF Defined)
- Псевдослучайное число (echo %random%)
Это в т.ч. широкий спектр вспомогательных утилит из состава Resourse Kit, Support Tools, UnxUtils, Sysinternals Suite.
Если брать в общем. Batch - это искусство:
- использования различных команд и утилит, в т.ч. самописных программ
- выстраивание логических цепочек последовательности их работы (запукаем одну команду/программу, дожидаемся ее завершения, анализируем вывод, запускаем другую)
- анализа кодов возврата ошибок
- построение логики дальнейших действий в зависимости от этого.
Для чего батники не предназначены:
Спасибо Smitis.
- Батники не предназначены для обработки текстовых файлов. Некоторые очень минимальные средства есть, но именно что минимальные. Имхо, предназначены были для обработки простых чётко структуированных файлов, вроде каких-нибудь логов. И уж точно не для обработки "художественных" текстов в непонятно какой кодировке. Нет, иногда можно и этими средствами задачу решить, но в целом - НЕ предназначены.
- Батники не предназначены для интерактивного взаимодействия с пользователем. Опять таки, кое что есть, дождаться нажатия клавиши, простейший выбор и т.п., но графический интерфейс на нём не напишешь.
- Сложные математические рассчеты. Например, деление есть только целочисленное. Поэтому самое сложное, что можно получить это остаток от деления. Хочется степень числа - нужно писать свою функцию.
- С помощью батников нельзя жарить картошку
Последнее редактирование: