Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах И снова пакетные файлы, часть 1


Итак, опрос 'Содержимое какой из книг вы бы хотели прочитать в будущих статьях на нашем сайте?' окончен. Наибольшее количество голосов получила книга Оптимизация и автоматизация работы на ПК. На 100%. Поэтому в скором времени вы сможете встретить содержимое этой книги на нашем сайте, а также в данной рассылке (только наиболее интересные части книги, которые относятся к теме рассылки).
Другие наши рассылки:
  • Новости IT-мира: Ежедневно ссылки на новые новости и статьи популярных компьютерных сайтов.
  • Рецензии на новые книги: Описание новых книг о компьютерах, дизайне, бухгалтерии, психологии и др. направлениях мысли человечества.
  • Новости нашего сайта: Ежедневно ссылки на новые материалы, поступающие на наш сайт: от ссылок на статьи до ссылок на новые и обновленные записи онлайновых баз данных.

Данная статья была написана для журнала Мой компьютер.

Операционная система Windows Vista поддерживает множество методов автоматизации часто выполняемых вами действий. В частности, к стандартным методам относятся пакетные файлы, inf-файлы, сервер сценариев Windows (WSH), а также инструментарий управления Windows (WMI). Кроме того, отдельно от операционной системы поставляется комплект PowerShell, обладающий огромной функциональностью.

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

Пакетный файл представляет собой обычный текстовый файл с расширением .bat или .cmd, содержащий в себе список команд, которые должны быть выполнены командной строкой cmd.exe. В операционной системе Windows Vista разницы между bat-файлами и cmd-файлами практически нет. Файлы как с тем, так и с другим расширением обрабатываются при помощи командной строки cmd.exe. В предыдущих же версиях Windows bat-файлы обрабатывались командной строкой command.com. Данная командная строка не поддерживает всех возможностей cmd.exe, поэтому правильнее создавать cmd-файлы (особенно если вы собираетесь использовать их не только на операционной системе Windows Vista).

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

Regedit.exe
Calc.exe

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

Некоторые символы в bat-файлах имеют особое назначение, поэтому их нельзя использовать в строках, не обрамленных кавычками. Например, к таким символам относятся следующие символы: ( ) < > ^ & |.

Если по каким-либо причинам вы хотите использовать эти символы в строке, не обрамленной кавычками, тогда перед символами, имеющими особое назначение, необходимо поставить символ ^. Например, вместо фразы Tom & Jarry нужно использовать фразу Tom ^& Jarry,

Как добавить в bat-файл комментарии

Одной из особенностей bat-файлов является возможность добавления к их телу комментариев. Делается это при помощи добавления перед комментарием ключевого слова rem.

По умолчанию комментарии, при выполнении пакетного файла, выводятся на экран, однако сами не выполняются. Если же вы хотите, чтобы комментарий не только не выполнялся, но еще и не выводился на экран, тогда в самом начале bat-файла напишите строчку echo off. Чтобы отменить действие этой строки в середине bat-файла, просто напишите другую строчку — echo on.

Вместо команд echo off и echo on можно использовать команды @echo off и @echo on. В этом случае в командной строке также не будет отображаться запись о выполнении соответствующей команды echo.

Как вы, наверное, заметили, два представленных выше способа ввода команды echo отличаются друг от друга лишь символом @ в начале строки. Общее правило таково. Чтобы в командной строке не отображалась какая-либо выполняемая команда, перед ней нужно поставить символ @.

Ниже представлен пример bat-файла, использующего комментарии.

Echo off
Rem мы отключили отображение комментариев на экране
Rem то есть, этот комментарий отображаться не будет
Regedit.exe
Echo on
Rem а этот комментарий будет отображаться на экране
Calc.exe

Также для добавления комментария к .bat-файлу вместо rem можно использовать ::.

Как вывести сообщение на экран

Вывести сообщение на экран очень просто. Для этого достаточно воспользоваться командой вида echo [текст сообщения]. Данная команда отображает сообщение даже при указании команды echo off (причем отображает сообщение один раз). Если же в сценарии установлена команда echo on, тогда текст сообщений echo будет дублироваться.

Как работать с аргументами bat-файла

Интересной возможностью bat-файлов является возможность обработки аргументов запуска. Аргументами запуска называются значения, передаваемые в bat-файл при его запуске. Например, команда test.bat one 34 test запускает файл test.bat, передавая ему три аргумента: one, 34 и test.

Работать с полученными при запуске аргументами достаточно просто. Для этого достаточно обратиться к ним при помощи переменных %1 (первый аргумент), %2 (второй аргумент), %3 (третий аргумент) и т.д.

Также в сценарии можно использовать переменную %0, которая указывает на путь к запущенному вами bat-файлу.

Содержимое переменных, определяющих аргументы запуска bat-файла (а также переменной %0), можно конкретизировать при помощи набора специальных переменных вида %~[символ][номер переменной]. Эти переменные представлены ниже.

  • %~1. Удалить кавычки, обрамляющие содержимое переменной %1.
  • %~f1. Расширить переменную %1 до полного имени файла.
  • %~d1. Вернуть имя диска, определенного в пути, хранящемся в переменной %1.
  • %~p1. Вернуть путь к файлу, определенный в пути, хранящемся в переменной %1.
  • %~n1. Вернуть имя файла, определенного в пути, хранящемся в переменной %1.
  • %~x1. Вернуть расширение имени файла, определенного в пути, хранящемся в переменной %1.
  • %~s1. Вернуть путь, хранящийся в переменной %1, с использованием только коротких имен.
  • %~a1. Расширить переменную %1 до атрибутов файла.
  • %~t1. Расширить переменную %1 до даты/времени.
  • %~z1. Расширить переменную %1 до размера файла.
  • %~$PATH:1. Заменить значение переменной %1 на полное имя первого найденного в переменной среды PATH файла. Если ни одного файла в переменной среды PATH не найдено, тогда значение переменной %1 заменяется пустой строкой.

Интересной возможностью использования переменных вида %~[символ][номер переменной] является возможность их объединения (то есть, объединения тех данных, которые они выводят). Для этого достаточно вместо двух переменных использовать одну вида %~[символ первой переменной][символ второй переменной][номер переменной].

Для примера давайте рассмотрим bat-файл (листинг ниже), который выполняет две переданные в него команды, как два аргумента запуска.

echo off
rem Если аргумент запуска содержит пробелы, запятые или точки с запятой,
rem тогда он должен быть взят в кавычки.
rem Поэтому нам придется воспользоваться переменными %~1 и %~2,
rem чтобы удалить ограничивающие кавычки аргументов (если они есть)
start %~1
start %~2

Еще один пример использования конкретизирующих переменных можно выразить при помощи одной строчки — "%~dp0[имя файла]". При помощи данной строчки выполняется запуск определенной программы, которая находится в том же каталоге, что и сам bat-файл. Иногда эта строчка бывает особенно полезна и необходима.

Переменная среды %ERRORLEVEL%

Переменная среды %ERRORLEVEL% содержит в себе код, который возвратила предыдущая выполненная bat-файлом команда. Не все команды возвращают какие-либо коды. Если команда не возвратила ничего, тогда значение переменной среды %ERRORLEVEL% равно 0.

Ниже перечислены программы, которые используют переменную среды %ERRORLEVEL%.

  • Choice.exe. Помещает в переменную среды номер нажатой пользователем клавиши.
  • Color.exe. Присваивает значение 1, если цвет текста и цвет фона совпадают.
  • Exit.exe. Присваивается значение кода возврата, если он был указан при вызове данной программы.
  • Set.exe. Присваивает значение 1, если искомая переменная среды не найдена.
  • Setlocal.exe. Присваивает значение 1, если опция, используемая при запуске setlocal.exe, не поддерживается, так как отключена расширенная обработка среды.
Как определить строку, при помощи которой был запущен bat-файл

Для этого достаточно воспользоваться переменной среды %CMDCMDLINE%. Именно в ней находится строка, которую пользователь вводил для запуска данного bat-файла.

Что такое расширенная обработка команд

Расширенной обработкой команд называется режим работы командной строки cmd.exe, при котором некоторые стандартные программы операционной системы Windows Vista обладают дополнительными возможностями.

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

  • Чтобы отключить/включить расширенную обработку команд для конкретного сеанса работы с командной строкой, достаточно выполнить запуск командной строки при помощи синтаксиса вида cmd.exe /E:OFF (чтобы отключить расширенную обработку команд) или cmd.exe /E:ON (чтобы включить расширенную обработку команд).
  • Чтобы отключить/включить расширенную обработку команд для конкретного пользователя, необходимо создать параметр REG_DWORD типа EnableExtensions. Данный параметр должен находиться в ветви реестра HKEY_CURRENT_USER\Software\Microsoft\Command Processor. Для отключения расширенной обработки команд данному параметру нужно присвоить значение 0. Иначе значение 1.
  • Чтобы отключить/включить расширенную обработку команд для всех пользователей компьютера, необходимо создать параметр REG_DWORD типа EnableExtensions. Данный параметр должен находиться в ветви реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor. Для отключения расширенной обработки команд данному параметру нужно присвоить значение 0. Иначе значение 1.

Ниже представлены программы, на которые влияет отключение/включение расширенной обработки команд, а также их опции, которые доступны только при включенной расширенной обработке команд.

  • DEL | ERASE. Вывод для ключа /S изменяется на обратный (то есть, отображаются только имена удаленных файлов).
  • CD | CHDIR. Пробелы перестают рассматриваться как разделители. То есть, вы можете не заключать путь к каталогу в кавычки, даже если он содержит пробелы. При отключенной обработке команд путь к каталогу нужно брать в кавычки.
  • MD | MKDIR. Выполняется автоматическое создание всех промежуточных каталогов, которые определены в пути, но не существуют на самом деле. При отключенной обработке команд несуществующие промежуточные каталоги необходимо создавать самостоятельно.
  • PROMPT. Поддерживаются дополнительные символы форматирования $+ (отобразить столько знаков плюс, какая глубина стека программы PUSHD установлена в текущий момент) и $M (если текущий диск является сетевым, тогда также отобразить полный удаленный путь к нему).
  • PUSHD. Разрешается сохранение в стеке сетевых путей. При этом сетевым путям присваиваются временные имена дисков.
  • POPD. Автоматически выполняется удаление временных имен дисков, созданных для помещенных в стек сетевых каталогов.
  • SET. Включена возможность вывода всех доступных переменных среды, начинающихся с введенной буквы (при помощи синтаксиса set [буква]). Поддерживаются две дополнительные опции: опция /A и опция /P.
  • SETLOCAL. Поддерживаются опции ENABLEEXTENSIONS и DISABLEEXTENSIONS, позволяющие включить/отключить расширенную обработку команд до выполнения команды. Поддерживаются опции ENABLEDELAYEDEXPANSION и DISABLEDELAYEDEXPANSION, позволяющие включить/отключить отложенное расширение переменной среды до выполнения команды.
  • ENDLOCAL. Восстанавливает состояние расширенной обработки команд по умолчанию, если предыдущая команда SETLOCAL изменила это состояние при помощи опций ENABLEEXTENSIONS и DISABLEEXTENSIONS.
  • IF. Поддерживаются операторы сравнения (EQL, NEQ, LSS, LEQ, GTR, GEQ), а также варианты синтаксиса IF DEFINED [переменная] [команда] и IF CMDEXTVERSION [число] [команда].
  • FOR. Поддерживаются следующие варианты синтаксиса:
    FOR /D %переменная IN (набор) DO команда
    FOR /R [путь] %переменная IN (набор) DO команда
    FOR /L %переменная IN (начало,шаг,конец) DO команда
    FOR /F ["ключи"] %переменная IN (набор) DO команда
  • CALL. Поддерживается использование меток. То есть, команд вида call :[имя метки].
  • SHIFT. Поддерживается опция /n, позволяющая определить начало сдвига.
  • GOTO. Поддерживается вариант команды GOTO :EOF, передающий управление в конец пакетного файла.
  • START. Если расширение исполняемого файла не указано, программа автоматически подставляет следующие расширения: .COM,.EXE,.BAT,.CMD. При запуске неисполняемых файлов через механизм сопоставления (например, при запуске файла primer.doc) нет необходимости указывать расширение для сопоставления.

Продолжение следует

Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=108

В избранное