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

Кон В. Г.   13-08-2023   http://kohnvict.narod.ru

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

Такой же, но более развитый, командный способ использования операционной системы до сих пор существует во всех версиях ОСВ. Для выполнения команд даже самые последние версии имеют консольное окно, очень напоминающее окно ДОС, в котором эти команды можно вводить. В момент последнего редактирования этой статьи я работал в Виндовс-10 и все проверял на этой системе. Выставляет это окно и исполняет команды специальная программа, которая находится в файле С:\Windows\System32\cmd.exe. Ее можно запускать непосредственно по имени (cmd) в командной строке, которую можно открыть, например, по клавишам [Вин]+[X], затем в меню по строке (Выполнить). Но это не удобно, потому что командную строку надо записывать руками. Есть более удобный способ, который работает во всех ОСВ и работал в ДОС. А именно, в ОСВ принято, что все файлы с расширением bat, например, run.bat автоматически выполняются программой cmd.exe, которая открывает это самое консольное окно и интерпретирует каждую строку файла как команду, которая автоматически записывается в командную строку консоли.

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

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

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

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

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

 help cmd
 pause

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

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

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

В старых ОСВ была проблема с русским текстом в консольном окне. Он не читался. Чтобы он читался, систему приходилось настраивать. В Виндовс-10 я не помню, чтобы я это делал. Если ноутбук куплен в России с предустановленной системой, то обычно все работает сразу правильно. Если нет, то как быть можно узнать в интернете. Здесь я об этом писать не стану, так как многим это не понадобиться.

Многие команды ОС Виндовс запускают программы, которые не только получают входные параметры из командной строки, но и просят ввести какие-то значения с клавиатуры как ответ на вопрос программы, а результаты печатают в консольное окно строку за строкой. Если данных для ввода мало, а результат записывается коротко, то и достаточно. А если нет? Тогда получается очень неудобно. Возникает проблема, которую надо решать.

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

 help > out.txt
 pause

И снова дважды кликните на иконке файла.

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

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

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

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

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

 C:\"Program Files"\Adobe\"Acrobat DC"\Acrobat\Acrobat.exe 009.pdf
 pause

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

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

Я попробовал указать полный адрес рабочего стола, у меня он пишется так (C:\Users\Victor\Desktop\). Тут все стандартное, кроме слова (Victor). Это название моего аккаунта на ноутбуке. Других аккаунтов нет, я единственный пользователь, но так сделано, и другие аккаунты формально могут быть, хотя я уверен, что у 99 процентов пользователей их нет. Это самое неприятное место в системе Виндовс на мой взгляд.

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

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

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

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

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

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

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

 set path=C:\"Program Files"\Java\jre1.8.0_341\bin;%path%
 java -jar vkACL.jar
 pause

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

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

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

Снова отмечу, что если файл "vkACL.jar" записан без указания папки, то bat-файл должен находиться в этой же папке. Еще один момент. Файл с расширением 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" не может перемещать файл, она только меняет имя файла, оставляя его в той же папке. Ее удобно использовать для изменения расширения файла. Вот пример. Любая Java программа в формате jar -- это запакованный zip архив. Но чтобы легко открыть этот архив, используя ОСВ нужно переименовать файл с имени "name.jar" на имя "name.zip". После этого такой файл можно открыть как папку, посмотреть что там есть, кое-что исправить, и потом снова переименовать обратно. И мы снова получаем программу, но уже в измененном виде.

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

 dir /B /S > dir.txt

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

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

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

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

 type filename

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

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

Этого часто хватает, и все же не стоит забывать про наличие таких команд, как "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), которая описана в статье [2]. Она является бесплатной и тоже поддерживает режим работы через командные файлы, но свои собственные Она позволяет за несколько минут синхронизировать основные папки терабайтных винчестеров, что очень удобно. Хотя облачные технологии постепенно вытесняют переносные накопители, но они все равно необходимы как резерв на случай пропажи интернета. И пока копирование с них все же быстрее, чем через интернет.

Для работы в интернете с самого начала развития системы Юникс появились команды (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 для второго и так далее. Это удобно и при непосредственном использовании, если под рукой есть командная строка, как в программе (Тотал коммандер). Но редактирование файла тоже можно сделать достаточно эффективно.

В ОСВ есть дополнительные команды, которых не было в ДОС или в ранних версиях Виндовс. Так команда (control) сразу открывает окно "Control Panel", с которого можно выполнять настройку компьютера. Более того, если указать конкретно на раздел, то откроется именно этот раздел. Например, команды (control keyboard) и (control mouse) откроют соответствующие окна настройки клавиатуры и мыши. Для остальных разделов наверно тоже есть названия, но я пока их не нашел. Также очень многое запускается не из меню, а по горячим клавишам. Пример. В меню нет кнопки "Run", но ее можно открыть, если нажать клавиши [Win]+[R]. Клавиши [Win]+[X] открывают меню из которого можно сразу получить выход к основным окнам настройки системы.

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

Я рассказал про наиболее интересные команды ОСВ, но далеко не про все. Кто хочет узнать больше может воспользоваться интернетом и поисковиками Яндекс, Гугл и их аналогами. Можно воспользоваться ссылками [4], [5], [6]. Также отмечу, что при программировании на любом языке совсем не обязательно использовать среды разработки. Использование bat-файлов и подходящих редакторов текстов с разметкой, а также интернет ресурсов позволяет весьма удобно программировать и без специальных и больших программ на любом языке. У меня есть опыт программирования таким образом на языке Java. А раньше я так же точно программировал на фортране. Я не отрицаю полезность сред разработки, но они не обязательно должны использовать только одну программу.

Ссылки

1. Сайт для запуска старых систем Виндовс
2. Советы тем, кто работает в системе Виндовс.
3. Описание правил работы с моим редактором.
4. Команды ОС Виндовс на сайте lumpics
5. Команды ОС Виндовс на сайте lifewire
6. Команды ОС Виндовс на сайте windd

.