Статья Задачи, легко реализуемые с помощью CMD

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,132
Реакции
5,908
Баллы
648
Прежде, чем перейти к изучению языка Windows 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)
Работа с дисковой подсистемой (+ см DiskPart /? и fsutil /?):
  • разметка, изменение размера
  • задание метки тома, атрибута "Активный"
  • информация о файловой системе и преобразование, свободное место на диске
  • просмотр точек монтирования томов (mountvol)
  • создание виртуальных ЖД (видео)
  • ... и многое... многое...
Архивация, разархивирование (для CAB - makecab, extrac32, сторонние утилиты - 7za, rar)
Резервное копирование (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)
Установка даты/времени (Date, Time)
Работа с простым текстом:
  • Построчное чтение файла (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.

  • Батники не предназначены для обработки текстовых файлов. Некоторые очень минимальные средства есть, но именно что минимальные. Имхо, предназначены были для обработки простых чётко структуированных файлов, вроде каких-нибудь логов. И уж точно не для обработки "художественных" текстов в непонятно какой кодировке. Нет, иногда можно и этими средствами задачу решить, но в целом - НЕ предназначены.
  • Батники не предназначены для интерактивного взаимодействия с пользователем. Опять таки, кое что есть, дождаться нажатия клавиши, простейший выбор и т.п., но графический интерфейс на нём не напишешь.
  • Сложные математические рассчеты. Например, деление есть только целочисленное. Поэтому самое сложное, что можно получить это остаток от деления. Хочется степень числа - нужно писать свою функцию.
  • С помощью батников нельзя жарить картошку :)
 
Последнее редактирование:

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,349
Реакции
5,973
Баллы
998
bat-ов обычно не грызут вирусы-червяки.
спорное утверждение и имхо неверное. Батники также заражаются вирусами, просто так как сейчас батники используются реже, то и вирусы заражающие их встречаются реже.
+ Есть целая куча вирусов, которая создаёт свои (вредоносные) батники.
 

Mistik

Активный пользователь
Сообщения
121
Реакции
161
Баллы
433
Не зря же в *nix системах рулит консоль и скрипты.
 

Phoenix

Ветеран
Сообщения
2,107
Реакции
2,049
Баллы
503
спорное утверждение и имхо неверное. Батники также заражаются вирусами, просто так как сейчас батники используются реже, то и вирусы заражающие их встречаются реже.
+ Есть целая куча вирусов, которая создаёт свои (вредоносные) батники.
А что они (вирусы) сделают ? Откроют комментарии :) или испортят кодовую страницу ? Фактически это текстовый файл. Вирусы обычно пишут либо в начало файла либо в конец. А в батник имеет смысл писать команды, но не код. То есть заразить может только при запуске самого cmd.exe и conhost.exe.
 

vgrnt

Активный пользователь
Сообщения
48
Реакции
60
Баллы
248
Phoenix, Если туда дописать к примеру format C: весьма неприятная штука получится.
 

Кирилл

Команда форума
Администратор
Сообщения
13,827
Реакции
6,169
Баллы
913
Код bath может весьма серьезно нарушать работу системы в паре с вирусом.
 

Phoenix

Ветеран
Сообщения
2,107
Реакции
2,049
Баллы
503
bat-ов обычно не грызут вирусы-червяки.
Речь шла о вирусном заражении (!) И не подверженности изменения данного типа файлов вирусом или червем (хотя черви не заражают файлы (то есть не изменяют), а только размножаются).

Phoenix, Если туда дописать к примеру format C: весьма неприятная штука получится.
Туда это куда ? В любой батник ? Проще запустить свой с нужными командами. Не так ли ?!

Код bath может весьма серьезно нарушать работу системы в паре с вирусом.
Вирус сам по себе наносит достаточно повреждений системе. (как впрочем и злобный скрипт o_O)

Смысл вирусного заражения - дописать код вируса в исполняемый файл, для обеспечения запуска вирусного кода. Таким образом размножается программа-вирус.
Если в результате заражения файл-жертва (переносчик вируса (хост o_O)) будет испорчен в результате не корректной записи, то и код вируса не сможет работать (!)
 
Последнее редактирование:

Кирилл

Команда форума
Администратор
Сообщения
13,827
Реакции
6,169
Баллы
913
Смысл вирусного заражения - дописать код вируса в исполняемый файл, для обеспечения запуска вирусного кода. Таким образом размножается программа-вирус.
Угу.
И я о том же.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,132
Реакции
5,908
Баллы
648
История развития командной строки
Автор: Алмаз Гимадиев

Современные операционные системы семейства Windows являются прямыми потомками MS-DOS (Microsoft Disk Operation System) или как чаще ее называют DOS.

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

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





Командная среда, эмулирующая DOS имеет множество названий, таких как – командная строка, командное окно, командная среда и .т.д. Мы с Вами отойдем от таких размытых терминов и будем называть ее командной строкой.

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

  1. Во-первых, с помощью командной строки возможно создание сценариев автоматизации и пакетных файлов, т.е. выполнение одной или нескольких команд без вмешательства пользователя. Автоматизация заданий, сэкономит время и деньги. (Например, возможно создание cmd файла, который будет в архивировать Вашу систему, запустить антивирус на сканирование, также возможен запуск заданий на удаленном компьютере).
  2. Во-вторых, это управление данными и файлами (Например, копирование - copy, перемещение - move, удаление – del. Добавьте сюда возможность автоматизации и перед Вами мощный инструмент для использования).
  3. В-третьих, администрирование компьютера. По своему желанию можно создать даже службу которая будет запускаться при старте ОС.
  4. В-четвертых, администрирование сети. Многие команды администрирования сети не имеют графических эквивалентов (например – команда ping, pathping, tracert). Эти команды имею первостепенное значение при диагностике и устранении неисправностей проблем с сетью.
Соответственно, друзья – делайте выводы! Изучив командную строку, Вы получите знания, которые скрыты от рядовых пользователей. А знания – это Сила!

Источник
 

Кирилл

Команда форума
Администратор
Сообщения
13,827
Реакции
6,169
Баллы
913
В пятых.
Это удобно.
Да-да!Именно удобно.

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

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,132
Реакции
5,908
Баллы
648
Koza Nozdri, расскажи нам, какими командами ком. строки ты чаще всего пользуешься
и чем их преимущество по отношению к аналогам в графическом виде.
 

Кирилл

Команда форума
Администратор
Сообщения
13,827
Реакции
6,169
Баллы
913
Команды
Код:
reg query
reg save
reg load
dir
msinfo32
systeminfo
и много других.

а так же сценарии,например для шаблонов.
Я даже не знаю чем бы их заменить можно было)

// Поправил. Dragokas.
 
Последнее редактирование модератором:
Сверху Снизу