Программы для компьютера, команды Виндовс, 3

Это третья часть рассказа о командах операционной системы (ОС) Виндовс. Тем, кто взялся читать впервые, я советую сначала прочитать первые две части.  В первых частях я показал как можно эффективно использовать самые ходовые и важные команды. Но кроме них есть еще и много других команд. Все команды принято разделять на системы. Наиболее важными командами в ДОС являлись команды работы с файлами. Но Виндовс создала программу Проводник, а в ДОС сразу появилась программа Нортон коммандер, которая создала первую визуальную среду для работы с файлами. Сейчас на смену ей пришла программа Тотал коммандер, а еще позднее появилась программа Q-Dir, которую я описал в отдельной статье. Однако визуальные среды не работают со списком файлов, и предназначены для одноразовых операций, задаваемых руками (мышкой).

Этого часто хватает, и все же не стоит забывать про наличие таких команд, как "copy" (копировать несколько файлов в один), "move" (перемещение файла из папки в папку), "del" (уничтожение файла), "ren" (только переименование в той же папке). К ним можно добавить также команду "md" (make directory), которая создает новую папку внутри текущей папки, и имеет аргументом имя папки. У нее есть еще более старое название "mkdir". Команда "rd" или "rmdir" является обратной к предыдущей, она уничтожает папку внутри текущей папки. Эти команды уже можно считать устаревшими, так как их более удобно использовать в любом файловом менеджере типа Q-Dir. Такой же устаревшей командой можно считать "date", которая показывает текущую дату и позволяет установить новую. Впрочем иногда ее можно использовать в пакетном режиме для каких-то целей, например вывода даты в каталог файлов.

Я замечу, что иногда полезно использовать регулярные (специальные) выражения в командах. Так, например, команда "del *.obj" уничтожит все файлы с расширением obj в текущей папке, то есть символ * означает любое имя файла. Есть и другие возможности.

Более полезной файловой командой являются команда "find", которая позволяет выполнить поиск произвольного набора символов, включая служебные символы типа конца строки в системе файлов. Команда "findstr" выполняет поиск одной или более текстовых строк и регулярных выражений в системе файлов. Для этих команд нет специальных программ, хотя их несложно сделать. Но иногда использование bat файлов может быть эффективно использовано и даже не нужно искать специальные программы. Я не стану подробно описывать эти команды, кто захочет сам сможет найти описание по указанной ранее схеме. Отмечу только, что вместо команды "help" с именем команды можно просто набрать имя команды с ключом /? . Результат будет одинаковый, но для некоторых команд "help" не дает ответ и предлагает использовать второй способ вызова описания.

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

Для того, чтобы понять в каких условиях работали программисты в ДОС, полезно попробовать команду "more". Она тоже показывает содержимое одного или нескольких файлов в консольном окне. В те времена не было другого способа узнать что записано в файле.  Текстовые редакторы были очень медленными и часто быстрее было пользоваться командой. Я уже рассказал о переменной "PATH" и команде "set path=...". Могу добавить, что есть еще команды "path" и "pathman" для показа и манипулирования этой переменной. Но указанная выше команда "set path=..." тоже показывает переменную "PATH". Я не уверен, что можно изменить переменную "PATH" так, чтобы изменения работали и после выхода из режима командной строки, это надо проверить практически.

К относительно полезным командам следует отнести команды анализа контента (содержания). Так иногда может пригодиться команда "sort", позволяющая упорядочивать содержимое заданного файла определенным образом и записывать результат работы в другой файл. Другая полезная команда "comp" (compare) позволяет сравнить два файла или две системы файлов на идентичность содержания. Если указаны системы файлов, то сравниваются только файлы с одинаковыми именами. Различия сообщаются только для файлов одинакового размера. Более мощной командой такого типа является "fc" (file compare). Надо сказать, что в программе Тотал коммандер есть визуальная программа для сравнения файлов. Но и про данную команду тоже знать не помешает.

Достаточно полезной является команда "replace", которая позволяет заменить старые версии файлов на внешнем винчестере или на флэшке новыми версиями, записанными на компьютере. Такая операция является главным элементом синхронизации переносных накопителей со стационарными компьютерами. Однако лично я для этого пользуюсь готовой программой "Free file sync", которая является бесплатной и тоже поддерживает режим работы через командные файлы, но свои собственные Она позволяет за несколько минут синхронизировать основные папки терабайтных винчестеров, что очень удобно. Хотя облачные технологии постепенно вытесняют переносные накопители, но они все равно необходимы как резерв на случай пропажи интернета. И пока копирование с них все же быстрее, чем через интернет.

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

Правда программы обмена файлами через ftp даже при взаимодействии с провайдерами существуют. Но и такая практика все больше заменяется на онлайн загрузку без использования ftp протокола. А практика работы на чужом компьютере через интернет осталась только у высоких профессионалов. Простым пользователям это не надо. Зато набирает обороты практика работы на программах, работающих прямо на сервере и с файлами тоже размещенными на сервере, то есть, так называемые, облачные технологии. В этом случае компьютер используется только как пишущая машинка и экран. Среди интернет программ относительную популярность получила программа "ping", которая проверяет выход компьютера на сервер или в роутер. Вот как выглядят команды проверки обмена данными для роутера и сайта

ping 192.168.1.1
ping kohnvict.ya.ru
pause

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

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

dir /B /S | sort > dir.txt

Эта команда сначала запустит программу "dir" с двумя ключами, которая запишет каталог файлов внутри данной папки, включая все ее внутренние папки, но свой результат она передаст программе "sort", которая отсортирует строки по алфавиту и уже в таком виде запишет в файл. Удобство такой операции в том, что в упорядоченном каталоге намного проще искать заданный файл, особенно если каталог очень большой. Кроме того, каталоги удобно сравнивать по содержанию. Еще раз отмечу, что русские буквы будут показаны в ДОС кодировке, соответственно надо использовать фонт "Terminal" в Блокноте (Notepad).

Интересно, что команды в bat файле можно организовать таким образом, что они будут выполняться в зависимости от результатов их работы. Я попробую объяснить как это делается. Прежде всего, между командами можно расставить метки. Метка должна находиться в отдельной строке и начинаться со знака двоеточия. Метка не является командой, но она выполняет разметку. И есть команда "goto", которая не запускает никакую программу, но служит указателем интерпретатору перейти на метку, которая является ее аргументом. Вот пример

goto m1
ping 192.168.1.1
ping kohnvict.ya.ru
help shutdown
:m1
help goto   
pause

Легко понять что произойдет при выполнении данного пакета команд. Первая команда попросит интерпретатор сразу перейти к метке, и в результате выполнятся только последние две команды. Теперь понятно, что можно не комментировать лишние команды, а просто обойти их, используя команду goto и метку. Есть даже специальный вариант -- команда "goto :eof", по которой управление сразу перейдет в конец файла и все команды, записанные за ней выполняться не будут. Ясно, что это достаточно удобная команда. Нужно понимать, что переход на метку может быть сделан как вперед, так и назад. В последнем случае надо принимать специальные меры, чтобы выйти из бесконечного цикла.

Такие меры есть. Есть команды, которые выполняются по условию. Это позволяет реализовать автоматическую работу программы в зависимости от протекания процесса. Вот пример. Вы заказали сначала запуск программы A, а затем запуск программы B. Но запуск программы B имеет смысл только тогда, когда программа A сработала правильно. А что будет, если это не так. Тогда программа B будет просто напрасно работать. Для этой цели есть такие конструкции

if errorlevel n command
if not errorlevel n command   
 
Здесь первая команда выполнится только при условии, что переменная ОС "errorlevel" будет больше или равна n, где n -- число. А вторая -- наоборот. Переменная "errorlevel" генерируется любой программой при ее завершении. Более того, можно так написать программу, чтобы эта переменная имела заранее заданное значение при выходе из программы. Обычно, если программа выполнилась благополучно, то значение "errorlevel" равно 0, а если была ошибка, то 1. Но могут быть и другие значения в зависимости от характера ошибки. Любая программа сама генерирует это значение в момент завершения. Просто надо знать заранее как работает программа и тогда можно использовать это знание для более адекватной организации процесса. Другой вариант такой

if exist file command
if not exist file command

Здесь первая команда выполнится, если указанный файл существует, а вторая -- наоборот. Снова есть взаимодействие. Например, первая программа при своем удачном завершении должна записать файл. Если файл записан, имеет смысл запускать вторую программу, а если нет, то нет. Или наоборот, если возникла ошибка, то программа записывает файл с указанием ошибки. А нет, так нет. Есть и другие варианты

if defined variable command
if not defined variable command

Здесь первая команда выполнится, если переменная "variable" определена, а вторая наоборот. Есть еще условная команда по сравнению текстовых строк, но она статическая. Я ее запишу так

if [not] [/I] string1 op string2 command

Здесь выражения в квадратных скобках необязательны, могут быть или не быть. Операция "op" может принимать такие значения EQU, NEQ, LSS, LEQ, GTR, GEQ, их смысл я поясню символами ==, !=, <, <=, >, >=. То есть сравниваются две строки текста и проверяется одно из 6-ти соотношений между ними. Ключ /I ставится если надо учитывать регистр записи символов. В противном случае регистр не учитывается.

Есть еще команды, реализующие циклы, но это уже редко используется. Более того, циклы легко реализовать используя комбинацию команд "goto" и "if", и я даже не хочу про них рассказывать. Кому надо -- делайте запрос в Яндексе и все найдете. Вот интересно, что есть команда "shutdown", которая позволяет выключить компьютер и есть команды, которые позволяют указать время паузы для выполнения других команд. Но это все достаточно опасные и специфические операции, и я не советую их использовать. Хотя при определенном искусстве написания bat файлов можно организовать работу компьютера на часы, допустим ночью, и потом его выключить. Это разумно.

В заключение скажу, что в bat файлах можно запускать не только программы, но и другие bat файлы. Для этого используется команда "call". И, наконец, последнее. Даже сами bat файлы можно записывать с аргументами, например, в той же команде "call". При этом аргументы в теле bat файла заменяются на выражения типа сп1 для первого аргумента, сп2 для второго и так далее. Здесь сп означает символ процента, который почему-то не показывается на ПРОЗЕ. Это удобно и при непосредственном использовании, если под рукой есть командная строка, как в программе Тотал коммандер. Но редактирование файла тоже можно сделать достаточно эффективно.

В Виндовс 8 есть дополнительные команды, но я не знаю, были ли они в более ранних версиях Виндовс. Так команда "control" сразу открывает окно "Control Panel", с которого можно выполнять настройку компьютера. Более того, если указать конкретно на раздел, то откроется именно этот раздел. Например, команды "control keyboard" и "control mouse" откроют соответствующие окна настройки клавиатуры и мыши. Для остальных разделов наверно тоже есть названия., но я пока их не нашел. Также очень многое запускается не из меню, а по горячим клавишам. Пример. В меню нет кнопки "Run", но ее можно открыть, если нажать клавиши Win + R. Клавиши Win + X открывают меню из которого можно сразу получить выход к основным окнам настройки системы.
 
Я рассказал про наиболее интересные команды ОС Виндовс, но далеко не про все. Кого заинтересовал этот вопрос и кто хочет узнать больше может воспользоваться интернетом и поиском в системах Яндекс, Гугл и им аналогичных. Использование bat файлов и подходящих редакторов с разметкой текста, а также интернет ресурсов позволяет весьма удобно программировать без среды разработки на любом языке, но у меня есть опыт программирования таким образом на языке Java. А раньше я так же точно программировал на фортране. Я не отрицаю полезность сред разработки, но они не обязательно должны использовать только одну программу.


Рецензии