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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Dragokas, 2 ноя 2013.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.307
    Прежде, чем перейти к изучению языка 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 утилитами:


    В скобках указывается соответствующая команда консоли, которую Вы можете изучить самостоятельно.
    Вывод справки по команде:
    Код (Text):
    Команда /?
    Работа с файлами:
    • Создание пустого файла (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.

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

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
    спорное утверждение и имхо неверное. Батники также заражаются вирусами, просто так как сейчас батники используются реже, то и вирусы заражающие их встречаются реже.
    + Есть целая куча вирусов, которая создаёт свои (вредоносные) батники.
     
    Mistik и Dragokas нравится это.
  3. Mistik
    Оффлайн

    Mistik Активный пользователь

    Сообщения:
    126
    Симпатии:
    187
    Не зря же в *nix системах рулит консоль и скрипты.
     
  4. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.852
    Симпатии:
    1.837
    А что они (вирусы) сделают ? Откроют комментарии :) или испортят кодовую страницу ? Фактически это текстовый файл. Вирусы обычно пишут либо в начало файла либо в конец. А в батник имеет смысл писать команды, но не код. То есть заразить может только при запуске самого cmd.exe и conhost.exe.
     
  5. vgrnt
    Оффлайн

    vgrnt Активный пользователь

    Сообщения:
    48
    Симпатии:
    60
    Phoenix, Если туда дописать к примеру format C: весьма неприятная штука получится.
     
  6. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Код bath может весьма серьезно нарушать работу системы в паре с вирусом.
     
  7. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.852
    Симпатии:
    1.837
    Речь шла о вирусном заражении (!) И не подверженности изменения данного типа файлов вирусом или червем (хотя черви не заражают файлы (то есть не изменяют), а только размножаются).

    Туда это куда ? В любой батник ? Проще запустить свой с нужными командами. Не так ли ?!

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

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

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Угу.
    И я о том же.
     
  9. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.852
    Симпатии:
    1.837
  10. vgrnt
    Оффлайн

    vgrnt Активный пользователь

    Сообщения:
    48
    Симпатии:
    60
    Именно, и это уже - вредоносный код, способный нанести вред.
     
  11. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.852
    Симпатии:
    1.837
    Не спорю, любой код может быть опасным. Раньше таким образом заражали autoexec.bat
     
  12. shestale
    Оффлайн

    shestale Ассоциация VN/VIP Преподаватель

    Сообщения:
    8.059
    Симпатии:
    4.488
    Это было в такие далекие, стародавние времена...)))
     
  13. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.307
    История развития командной строки
    Автор: Алмаз Гимадиев

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

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

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



    [​IMG]

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

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

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

    Источник
     
    Phoenix и Kиpилл нравится это.
  14. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    В пятых.
    Это удобно.
    Да-да!Именно удобно.

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

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.307
    Koza Nozdri, расскажи нам, какими командами ком. строки ты чаще всего пользуешься
    и чем их преимущество по отношению к аналогам в графическом виде.
     
  16. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Команды
    Код (Text):
    reg query
    reg save
    reg load
    dir
    msinfo32
    systeminfo
    и много других.

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

    // Поправил. Dragokas.
     
    Последнее редактирование модератором: 17 янв 2014

Поделиться этой страницей