Команды Виндовс, темная материя операционной системы

Данный рассказ я хочу посвятить основам главной программы на компьютере многих пользователей, а именно, операционной системе (ОС) Виндовс. Сейчас продают систему 8.1, а история насчитывает уже очень много самых разных версий. В наше время старые версии ОС уже можно посмотреть в браузере Гугл Хром, и даже немного в них поработать (смотри [1]). Но еще до появления Виндовс на самых первых персональных компьютерах устанавливалась система ДОС. Она не была многозадачной и не была графической. В то время графика очень медленно выполнялась и была примитивной, поэтому для ускорения системы использовался текст, а точнее текстовые команды ДОС, которые являлись частным случаем специального языка программирования автоматической работы на компьютере.

И этот командный способ использования операционной системы до сих пор существует во всех версиях ОС Виндовс. Для выполнения команд даже самые последние версии имеют консольное окно, очень напоминающее окно ДОС, в котором эти команды можно вводить. А выставляет это окно и исполняет команды специальная программа windows\system32\cmd.exe. Ее можно запускать непосредственно по адресу, по иконке, а можно и в Проводнике (файловом менеджере системы Виндовс) по кнопке Открыть командную строку в меню Файл. Но это не удобно, потому что командную строку надо записывать руками. Есть более удобный способ, который работает во всех системах Виндовс и работал в ДОС. А именно, в системе Виндовс принято, что все файлы с расширением bat, например, run.bat автоматически выполняются программой windows\system32\cmd.exe, которая открывает это самое консольное окно и интерпретирует каждую строку файла как команду, которая автоматически записывается в командную строку консоли.

Этот вариант намного удобнее, потому, что файл с расширением bat можно предварительно отредактировать в любом текстовом редакторе, и файл сохраняется на винчестере, его можно копировать и многократно исполнять. В системе Юникс (Линукс) любой файл можно объявить как командный, а в системе Виндовс такое объявление происходит путем записи расширения bat. В этом смысле слова bat-файл и командный файл синонимы. Как я уже сказал, командный язык был разработан еще в ДОС, и он почти без изменений используется во всех системах Виндовс, хотя от системы к системе могут появляться новые команды. Однако старые продолжают работать.

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

В этой статье я начну постепенно рассказывать про некоторые команды ОС Виндовс. За каждой такой командой стоит специальная программа, которая выполняет ту или иную работу. Но есть и внутренние команды языка, которые указывают интерпретатору, то есть программе cmd.exe, как ей надо понимать и как выполнять команды. Такие команды разумно выучить даже раньше названий самих программ, чтобы лучше понимать написанный код. Вот с них и начнем. Работать можно где угодно, в любой папке компьютера или на рабочем столе, который тоже является специальной папкой.

Итак, сделайте следующее. Поставьте курсор мыши на рабочий стол в любом месте и кликните правую кнопку мыши. В появившемся меню выберите строку Создать и далее Текстовый документ. На рабочем столе появится иконка с длинным названием и с расширением txt. Названия всех иконок можно редактировать. Для этого кликните мышкой на названии, откроется маленький редактор и перепишите все название на run.bat и нажмите клавишу [Enter]. Появится предупреждение, что изменение типа файла повлечет за собой изменение запускающей программы. Игнорируйте, потому что именно это нам и надо.

Я должен оговориться, что так работает Виндовс-8. В Виндовс-7 расширение файлов вообще не показывается и изменить (отредактировать) его нельзя. Это дико, но Виндовс часто перегибает палку. В Виндовс-8 ситуацию исправили. Итак, у вас появилась иконка нового файла с названием run.bat. Но файл еще пустой. Теперь ставим курсор на иконку и снова нажимаем правую кнопку мыши. В меню выбираем строку Изменить, она вторая сверху. Открывается текстовый редактор Notepad (Блокнот) c пустым окном. Набираем в нем две строки

 help cmd
 pause

и спасаем набранный текст в файле. Вот мы и получили первый командный файл, который фактически тоже является программой. Сразу объясню, что означает набранный текст. Команда "help" просто дает описание, точнее инструкцию как пользоваться командой, которая является ее аргументом. То есть командой "cmd" в нашем случае. Командные строки имеют такую структуру, что первое слово -- это всегда команда, которая выполняется, а другие слова после него, набранные через пробел, являются ее аргументами. Их может быть много и они могут быть разными, зависит от того, как написана программа. Вторая команда "pause" останавливает выполнение всех других команд и дает подсказку нажать любую клавишу. В ДОС было необходимо нажать только клавишу [Enter], сейчас можно любую. Но клавиша [Enter] все равно главнее всех других, ее и нажимайте.

Эта команда очень полезная, потому что выполнение команд производится автоматически. Когда все команды кончились, то консольное окно автоматически закрывается, и прочитать информацию, которую печатали команды, невозможно. Иногда это полезно, но не в нашем случае. Итак, теперь достаточно кликнуть на иконке и откроется консольное окно, в котором будет показано описание команды "cmd". Так же точно можно получить описание любой другой команды.

То есть фактически остается только узнать имена всех команд и указанным способом можно получить инструкцию как ими пользоваться. Я укажу еще одну команду "exit", которая в ДОС закрывала консольное окно, потому что иначе оно не закрывалось. Команда осталась, но ее выполнять уже не обязательно, так как окно и так закрывается, а, кроме того, его можно закрыть как любое окно Виндовс, кликая крестик в правом верхнем углу.

Многие команды ОС Виндовс запускают программы, которые не только получают входные параметры из командной строки, но и просят ввести какие-то значения с клавиатуры как ответ на вопрос программы, а результаты печатают в консольное окно строку за строкой. Если данных для ввода мало, а результат записывается коротко, то и достаточно. А если нет? Тогда получается очень неудобно. Возникает проблема, которую надо решать. Решение вот такое. После всех обязательных параметров можно указать имена файлов, одно имя для файла, в котором набраны все данные, которые будут запрашиваться, и второе имя для файла, в который будет напечатан результат работы. В этом случае программа будет работать полностью автоматически. При этом перед входным именем файла надо ставить знак < (меньше), а перед выходным > (больше). На самом деле эти знаки означают стрелки, показывающие откуда и куда идет информация. Запишите в файл "run.bat" следующий текст

 help > out.txt
 pause

И дважды кликните на его иконке. На этот раз в консольном окне ничего не появится, зато на вашем рабочем столе появится иконка нового файла с именем "out.txt". Этот файл создала программа help, запущенная из командного файла "run.bat". Можно посмотреть его содержание в любом текстовом редакторе, например, в Notepad. И тут нас ждет первый сюрприз. Русские буквы текста нечитабельны. В чем дело? А дело в том, что Виндовс уже давно показывает русские буквы в так называемой виндовс-кодировке, а программа help продолжает показывать русские буквы в старой, то есть в дос-кодировке. Чтобы прочитать такой файл вам необходимо воспользоваться редактором, который умеет показывать текст во всех пяти кодировках русских символов, которые сейчас существуют.

Одной из таких программ является мой собственный редактор vkNotepad.jar, который можно скачать по ссылке [2]. Раньше было много самодельных программ перекодировщиков, поскольку это очень простая операция. Чтобы узнать как решить проблему сегодня я сделал запрос в интернете. Вот одно из решений. В Блокноте (Notepad) нужно выбрать шрифт "Terminal" и как раз он показывает русский текст в дос-кодировке. Есть и другие решения, но этих достаточно. Интересно почитать текст, который напечатала программа. Она сообщила, что надо набрать на командной строке имя команды, а дальше дала список некоторых команд, которые существуют в операционной системе. И это уже неплохо.

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

Это не всегда удобно. Удобно делать наоборот, то есть записывать bat-файл в тут же папку, где находится программа. В этом случае никаких проблем не будет. Но можно указывать не только файлы с расширением exe, а и файлы с другим расширением, например, txt, что еще более удобно. Что происходит в этом случае? А вот что. Операционная система помнит таблицу, в которой написано какую программу надо запускать с каким расширением файла. И она просто выполнит эту программу, хотя сама программа явно в команде не указана.

Это очень удобно. Например, можно указать на файл с расширением pdf и запустится Акробат ридер, который покажет файл. И так далее. Таким образом можно смотреть файлы очень многих типов. Легко сообразить, что все программы, которые запускаются по расширению файлов, при их запуске с командной строки имеют имена этих файлов как параметры. Поэтому можно использовать и другой способ -- запускать такие программы в явном виде указывая в качестве параметра имя файла, который вы хотите посмотреть. Но в этом случае надо знать полный адрес такой программы. Например, у меня выполняется такая команда

 c:\"Program Files (x86)"\Adobe\"Reader 11.0"\Reader\AcroRd32.exe anyfile.pdf
 pause

Правда при этом система требует разрешения, но его можно дать один раз на всю работу и дальше все будет автоматически. Что здесь важно? Сам bat-файл и pdf-файл находятся в одной папке, например, на рабочем столе, а вот для программы надо указать ее полный путь. Есть очень много способов узнать полный путь программы. Он, обычно, даже запрашивается при установке программы, или сообщается в ее свойствах. Важно, что таким способом можно уже запускать любой файл с любой программой, конечно при условии, что программа способна работать с файлом, то есть его формат записи правильный для этой программы.

Еще одна особенность. Так как пробел является разделителем между командой и параметром, то все имена внутри команды, содержащие пробелы, надо помещать в кавычки. Раньше, то есть в ДОС, имена с пробелами писать было нельзя. По этой причине я и сейчас не советую называть папки русскими буквами и писать в них пробелы. Это ограничивает применимость командного управления работой компьютера. И вообще это дурной тон.

Адоб ридер -- не единственная программа, которую можно запускать таким способом. Другими важными программами являются текстовые редакторы, браузеры, видео-проигрыватели и многие другие программы. Важно, что многие программы, которые впервые появились в системе Юникс, очень удобно запускаются именно таким способом. Часто они вообще не имеют графической среды общения с пользователем.

Итак, я показал как можно запускать любые программы с именем файла в виде параметра на командной строке. Это все же был частный случай, когда bat-файл и обрабатываемый файл находятся в одной папке, а сама программа задается полным именем, то есть начиная от буквы диска. И при этом программа сама не читает и не записывает никаких дополнительных файлов. Однако это не всегда так бывает. Бывают довольно сложные программы, которые записывают и читают дополнительные файлы.

Одной из таких программ является бесплатная программа МикТех, которая компилирует файл источника с расширением tex в pdf файл документа. Этой программой часто пользуются научные работники, потому что она позволяет очень легко и просто кодировать научные формулы. Но ее можно использовать для создания pdf документа любого типа. Кроме того, у нее фактически нет графической оболочки, то есть ее запускают только с помощью командной строки. Чтобы понять как это делается, надо познакомиться с принципами работы ОС Виндовс. Итак, вы указали системе имя файла с помощью команды и система должна найти этот файл.

Прежде всего она ищет его в той же папке, где находится командный bat файл. Но что делать, если его там нет? Искать его перебором во всех папках винчестера очень долго, особенно на современных терабайтных винчестерах. ОС поступает иначе. У нее есть список папок, в которых надо искать файл, причем этот список она проходит от начала до конца. То есть сначала ищет в первой папке списка, потом во второй и так далее. Для записи этого списка ОС использует системную строку с названием PATH. Команды пишутся маленькими буквами, а вот системные строки -- большими. Как правило, большие программы при установке сразу записывают в эту строку адрес папки, где они установлены. Поэтому эти программы можно указывать только по имени, система все равно их найдет, потому что будет искать в папке, которая записана в PATH.

Но записывать в эту строку все папки винчестера опять же невыгодно, мы снова получим медленную работу ОС. Выход все же есть. Существует команда, которая меняет содержимое строки PATH только на один сеанс работы bat файла. И с помощью этой команды можно увеличить эту строку еще на одну папку, именно ту, в которой находится необходимая программа для обработки вашего файла. Программа МикТех все же достаточно специфическая. Я поясню использование этой команды на примере запуска виртуальной машины Джава или JRE (Java Runtime Environment). Все программы, написанные на языке программирования Джава, используют JRE для своей работы. Это бесплатная программа, которую можно легко скачать и установить, и она является как бы дополнением в ОС.

При установке JRE она прописывает путь к своей папке в строке PATH. Точнее прописывала. Почему то в моей системе 8.1 этого уже не произошло. Точнее не так: упакованные программы в виде jar файлов запускаются автоматически, а сама программа java.exe не запускается. И для ее запуска надо указать путь к файлу, то есть имя папки, где она установлена. Делается это следующим образом:

 set path=C:\"Program Files (x86)"\Java\jre7\bin;%path%
 java -jar vkACL.jar
 pause

Выше я показал содержимое bat файла для запуска программы на языке программирования джава. Новой является команда "set path=...;%path%", где вместо многоточия указана конкретная папка на винчестере компьютера. Именно в ней находится программа java.exe.  Команда запишет эту папку в переменную PATH временно на первую позицию, а потом она запишет все то, что находилось в этой переменной раньше. На это как раз указывает хвост команды ";%path%". Здесь символ ; -- это разделитель между адресами папок, а слово path между символами % -- это содержимое переменной до выполнения этой команды.

Как только мы это сделали, мы можем смело писать программу по имени, в какой бы папке мы не находились. ОС все равно очень быстро найдет эту программу, а также она найдет и все другие файлы в папке программы, которые ей могут понадобиться для работы. Преимущество такого подхода еще и в том, что виртуальных машин джава уже накоплено много версий. Более того, если программа установлена, то ее папку можно скопировать хоть на флэшку и она все равно будет работать. Говоря компьютерным языком, это портабл (переносимая) программа. То есть ее можно копировать куда угодно и она все равно будет работать. Но только при правильном указании ее папки в переменной PATH. Это значит, что опытный пользователь может запустить джава программу даже на таком компьютере, где виртуальная машина не установлена. Ее можно иметь на флэшке.

Другое применение -- запуск специальной (более старой) версии виртуальной машины. Хотя производители все время навязывают использование только самых новых версий JRE, иногда бывает удобно использовать старые версии. Они могут иметь меньший размер или такую функциональность, которая пропала в новых версиях. Такое тоже бывает. Для этого просто надо прописать в команде "set path" адрес папки со старой версией JRE. Используя bat-файл, вы ничем не рискуете, так как команда выполнится только на один сеанс работы bat-файла.

Я уже сказал, что файл "vkACL.jar" можно запускать простым кликом на его иконке. Это сработает. Но виртуальная машина иногда дает сбои и не может выполнить кое какие действия. При этом она сообщает о своих проблемах печатью в консольное окно. Но при запуске простым кликом консольное окно не открывается и таких записей не видно. Чтобы их увидеть, надо запускать программу именно через указанный выше bat-файл. Только в этом случае откроется консольное окно (Терминал в терминах системы Юникс) и можно будет увидеть записи, которые делает JRE, а более конкретно -- программа java.exe.

Есть и другие применения bat-файла. Дело в том, что программа java.exe имеет очень много дополнительных параметров, не только имя файла, и все они указываются на командной строке. Очень важным параметром является размер выделяемой под программу оперативной памяти. ОС не может выделить программе всю оперативную память, ведь эта система многооконная, а значит многозадачная. Оперативная память распределяется между программами и сама ОС это делает исходя из своих предпочтений. А если вам надо выделить под вашу программу больше оперативной памяти, чем ей выделает ОС, то это надо специально указать дополнительным аргументом на командной строке. И ОС будет пытаться это сделать. Если вы закроете все лишние окна, то вероятность успеха увеличится.

Есть еще одна очень простая команда, которая может пригодиться. Предположим, что у вас есть программа, которая работает в какой-то папке, и все файлы она читает и записывает в этой папке. А вот bat-файл вы хотите записать в другую папку. Казалось бы можно поступить как выше. Можно, но есть другое решение, более эффективное и простое. Вы можете запустить bat файл только из папки, которая является активной в данный момент. Но есть команда, которая способна изменить это, и сделать активной другую папку. Она называется "cd". У нее есть и другие названия, но этого достаточно. Это первые буквы слов "change directory". Дело в том, что слово "папка" появилось только в ОС Виндовс. В ДОС вместо слова "папка" использовали другое слово -- "директория". По русски это означает поменять папку.

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

 cd C:\Files\letters\my-last-letter

Наверно можно писать русские буквы и пробелы (в кавычках), но я не использую русских букв в именах папок и пробелы не пишу, лучше писать символ черточки. Так что экспериментируйте самостоятельно. В данной записи буква диска нужна только для того, чтобы указать, что отсчет идет с самого начала, что это абсолютный путь. Если же все же надо и диск поменять, то надо использовать ключ "/D", тогда будет так

 cd /D D:\Files\letters\my-last-letter

при условии, что мы находимся на диске С. Использование этой команды позволяет записать все bat-файлы в одной папке, а затем переходить в разные папки для запуска разных программ и файлов. Иногда это бывает удобно. Но в данной команде можно указывать не только абсолютный путь, но и относительный, то есть относительно той папки, в которой находится bat файл. Для этого надо ввести понятие верхняя и нижняя папка. Нижняя папка -- это папка, которая создана в данной папке, она указывается с помощью символа разделителя в виде обратной наклонной черты \ . Так вниз можно опуститься на любое число этажей. А как подниматься наверх. Для этого используется специальное название папки в виде двух точек. Так название "..\" означает папку на один этаж выше текущей, "..\..\" -- на два этажа и так далее. То есть, если вам надо попасть на другую ветку, то сначала поднимаемся наверх на столько этажей сколько надо, а потом уже опускаемся вниз в другой ветке (высокой папке).

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

Итак, мы научились запускать самые разные программы с учетом их конкретного размещения на винчестере. Уже это позволяет очень упростить работу на компьютере. Достаточно сделать bat-файлы на запуск наиболее важных программа и файлов и уже не понадобятся ни рабочий стол, ни иконки. Но на самом деле команды системы способны выполнять любую работу, которую способна делать ОС. Так важными операциями являются копирование файлов, перемещение файлов, уничтожение файлов, переименование файлов. ОС Виндовс предоставляет меню по правой кнопке мыши для этих операций и все удобно. Но только если это надо сделать один раз. А если много?

А если много, то вы в этой работе получаете вместо мерседеса самокат, и надо все время толкать ногой, иначе никуда не поедете. С помощью команд можно автоматически выполнять очень много команд сразу. Ведь в bat-файл можно записать много строк и все команды выполнятся автоматически. Команды на указанные операции имеют имена "copy" (копирование файла), "move" (перемещение файла), "del" (уничтожение файла), "ren" (переименование файла).  Я не стану их подробно описывать, все уже давно написано. В частности, можно сделать такой bat-файл и все посмотреть средствами самой системы

 help copy
 pause
 help move
 pause
 help del
 pause
 help ren
 pause

Наверняка и в интернете полно есть информации об этих командах, нужно только правильно сделать запрос. Есть также и встроенное описание операционной системы. Но если эти команды использовать в их простой модификации, то все интуитивно просто. Отмечу только, что команда "ren" не может перемещать файл, она только меняет имя файла, оставляя его в той же папке. Ее удобно использовать для изменения расширения файла. Вот пример. Любая джава программа -- это запакованный zip архив. Но чтобы легко открыть этот архив, используя ОС нужно переименовать файл с имени "name.jar" на имя "name.zip". После этого такой файл можно открыть как папку, посмотреть что там есть, кое что исправить, и потом снова переименовать обратно. И мы снова получаем программу, но уже в измененном виде.

Используя bat-файлы можно очень легко работать с джава программами. Это и не удивительно. Ведь джава программы -- продукт, первоначально созданный для системы Юникс. А в ней командные файлы очень популярны до сих пор. Я укажу на еще одну очень полезную команду, а именно

 dir /B /S > dir.txt

Эта команда с указанными ключами запишет в файл "dir.txt" все имена файлов в текущей папке и всех ее внутренних папках. Этот файл можно переписать на флэшку и вы всегда будете знать какие файлы записаны у вас в данной папке на вашем домашнем компьютере, а какие на рабочем. Если указать имя папки в качестве аргумента, то можно составить каталоги многих папок за один прием. В частном случае эта команда позволяет просто сосчитать сколько файлов в папке по числу строк в файле  "dir.txt".

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

Я укажу еще одну команду, которая может оказаться полезной. Допустим вы создали bat-файл, который выполняет 10 команд. Но вам не надо выполнять 5-ю команду. Конечно можно ее стереть и все дела. Но потом она понадобится и ее придется снова печатать. Это неудобно. На этот случай есть команда "rem", которая превращает данную строку в комментарий (remark). И текст сохранен и команда не выполняется. Это тоже важная команда и она позволяет экономить силы при работе.

Если честно, то я описал все команды ОС Виндовс, которыми сам пользуюсь в своей работе. Но это просто от лени. Кроме того, я программист, и многие операции могу делать по собственным программам. Однако в системе Виндовс есть очень много других команд, которые могут пригодиться. Некоторые из них я попробую описать ниже.  Но здесь хочу сказать, что не все команды так уж интересны. Ведь команды создавались давно, во времена ДОС, и некоторые из них нужны на случай провала системы Виндовс. А реально в системе Виндовс эта работа делается лучше. Например есть команда

 type filename

Эта команда показывает в консольном окне содержимое файла с именем "filename" в текущей папке, или по полному имени, вместе с указанием пути. При этом русские буквы она показывает в ДОС кодировке и их невозможно прочесть в ОС Виндовс. Но это не очень удобно. Для такой работы есть программа "Universal Viewer", которая показывает содержание файлов любой природы в очень удобном виде. Да и сама ОС Виндовс тоже все покажет как надо. И перенаправлять выдачу в файл тоже нет смысла, мы просто получим копию файла. Такие команды вряд ли разумно использовать сегодня. Тем не менее, есть другие, не такие простые, но все же полезные.

Все команды принято разделять на системы. Наиболее важными командами в ДОС являлись команды работы с файлами. Но Виндовс создала программу Проводник, а в ДОС сразу появилась программа Нортон коммандер, которая создала первую визуальную среду для работы с файлами. Сейчас на смену ей пришла программа "Тотал коммандер", а еще позднее появилась программа "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. А раньше я так же точно программировал на фортране. Я не отрицаю полезность сред разработки, но они не обязательно должны использовать только одну программу.

Ссылки

[1] http://www.computerra.ru/91852/zapuskaem-staryie-versii-windows-v-brauzere/
[2] http://notepad-vk.narod.ru/


счетчик посещений   Виктор Кон на сервере Проза.ру   каталог слайд-шоу   мой главный сайт   мой блог



  Внимание! Сайт оптимизирован под браузер Google Chrome.