Немного о BAT-файлах и не только

Что-то вроде FAQ

Можно ли с помощью BAT-файлов вносить изменения в системный реестр Windows?

Наверное, самым простым вариантом внесения изменений в реестр Windows в данном случае всё же будет использование REG-файлов. Это специальные текстовые файлы, которые специально существуют в Windows для того, чтобы пользователь мог быстро внести нужные изменения в системный реестр, не утруждая себя долгими поисками нужного ключа в дереве, которое показывает RegEdit. Поскольку, я так понимаю, речь идёт о пакетном внесении каких-то параметров, то можно обойтись и вовсе без BAT-файла: в один REG-файл можно записать несколько ключей реестра, которые будут изменены при его запуске. Если же вам нужно сгенерировать значения ключей реестра, что называется, "на лету", то в этом случае можно "повесить" на BAT-файл генерацию и запуск REG-файла.

REG-файлы имеют достаточно простой формат. Это, фактически, текстовый файл с набором записей следующего вида:

[HKEY_LOCAL_MACHINE\Sub1\Sub2]
"Par1"=dword:0
"Par2"="string"
"Par3"=hex:cc,1b,00,00,00,40,3d,68

Здесь, конечно, вместо строки, заключённой в квадратные скобки, нужно поместить реальный путь к той ветке в реестре, параметры в которой вы намереваетесь изменить (при этом скобки должны остаться). Имена этих самых параметров должны быть заключены в кавычки, как и их значения в том случае, если эти параметры имеют строковый тип. Для параметров типа DWORD и HEX перед записью после знака равно их значения нужно, как видите, указывать соответствующий тип и ставить двоеточие. Записи в файле друг от друга никак специально отделять не надо - начиная с новой строки в квадратных скобках, изменения будут вноситься в параметры по новому адресу. В самом начале файла поместите также строку "Windows Registry Editor Version 5.00" (без кавычек) - эта строка нужна для того, чтобы редактор реестра мог определить, что данный файл содержит в себе ключи для внесения изменений в реестр; её наличие в REG-файле обязательно. Не забудьте также сделать расширение .REG у выходного файла.

Для формирования файла используйте команду >> - стандартный способ вывода информации из BAT-файла в текстовый файл. Для внесения изменений в реестр нужно вызвать утилиту regedit, в качестве параметра которой нужно передать имя REG-файла, например, так: "regedit crack.reg" (без кавычек).


Почему в строке, которую я хочу вывести на экран, не отображается знак процента?

В BAT-файлах символ процента используется для того, чтобы обозначать переменные - либо переменные среды, либо внутренние переменные самого BAT-файла. Поэтому если вы хотите вывести на экран символ процента, вам нужно на самом деле использовать два символа процента подряд, например: "echo This day performed 0.25%% of the whole project". Кстати, "%" - далеко не единственный символ, который имеет в BAT-файлах особое значение. Ещё это символы ">", "<", а также некоторые другие. Их можно вывести на экран в сообщении при помощи комбинаций "^<", "^>" (т.е. перед самим символом ставится "птичка").


Что такое errorlevel?

Рано или поздно любой начинающий создатель пакетных файлов Windows сталкивается с необходимостью проверить результат работы одной команды перед тем, как выполнить другую. Для этого существует встроенная переменная errorlevel, меняющая своё значение после исполнения каждой команды. Её значение может иметь разный смысл для разных команд, используемых в пакетных файлах. Обычно успешное выполнение команды отображается нулевым значением этой переменной, однако далеко не всегда ненулевое значение подразумевает какие-либо сбои или ошибки.

Применяют эту переменную так:

if errorlevel 0 echo Errorlevel is 0 or greater

Вместо "echo Errorlevel is 0 or greater" может, естественно, стоять какая-то более осмысленная и соответствующая вашей ситуации команда. После "if" можно добавить "not" (опять-таки, безо всяких кавычек) - тогда, соответственно, значение условия меняется на диаметрально противоположное. Надо сказать, что конструкция "errorlevel N" не означает точное равенство переменной errorlevel значению N - она означает, что команда после условия будет выполнена в том случае, если значение errorlevel больше или равно числу N. Соответственно, с помощью конструкции "if errorlevel" несколько удобнее проверять именно ошибки, нежели успешное выполнение той или иной команды. Впрочем, конечно, если написать "if not errorlevel 1", то в случае неотрицательных значений errorlevel'а мы получаем, что errorlevel равен нулю. Беда в том, что неотрицательности значений данной переменной вам никто не может гарантировать. Более подробно о конструкции "if errorlevel" можно почитать в справке операционной системы Windows.

Вадим СТАНКЕВИЧ,
[email protected]

Версия для печатиВерсия для печати

Номер: 

12 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!