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

Виктор Кон
Это вторая часть рассказа о командах операционной системе (ОС) Виндовс. Тем, кто взялся читать впервые, я советую сначала прочитать первую часть.  В первой части я показал как можно запускать любые программы с именем файла в виде параметра на командной строке. Это все же был частный случай, когда 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", которая показывает содержание файлов любой природы в очень удобном виде. Да и сама ОС Виндовс тоже все покажет как надо. И перенаправлять выдачу в файл тоже нет смысла, мы просто получим копию файла. Такие команды вряд ли разумно использовать сегодня. Тем не менее, есть другие, не такие простые, но все же полезные.

Продолжение в третьей части.