Работа с командной строкой ( CMD ) Windows. Работа со строками cmd


Работа со строками в командных файлах Windows 7 — Winreview.ru

Позавчера мне пришлось написать простенький командный файл, бекапящий профиль приложения. В качестве имени папки с резервной копией мне возжелалось использовать переменные окружения %date% и %time%. Если вы проходили в институте начальный курс информатики, вы должны знать, что %time%  в этом случае является ничем иным, как граблями, остро торчащими на пути, так значение содержит недопустимый символ ":". Я никогда не занимался разбором строк в командных файлах, и случай как нельзя лучше подходил для того, чтобы прокачать свои скилы.

Я хочу поделиться с вами своими изысканиями, и анонсирую скучную, унылую техническую статью. Дочитавшему до конца - покажу котика.В современных ОС интерпретатор командной строки позволяет выполнять простейшие строковые операции:

Замена символов/подстроки в переменной командной строки

Это то, что мне было нужно в первую очередь. Напомню, моя задача в первую очередь избавиться от двоеточий.

Решается очень просто:

[code]set mytime=%time::=_%[/code]

В этом примере используется синтаксис вида:

[code]%Переменная:ЧтоНайти=НаЧтоЗаменить%[/code]

В моем случае заменяется двоеточие на символ нижнего подчеркивания, и результат выглядит так:

Само собой, можно заменять не отдельные символы, а целые словосочетания:

Как ещё можно воспользоваться функцией замены? Например:

Удалить все пробелы из значения переменной

[code]echo %var: =%[/code]

Замена какой-либо части строки

Вы можете использовать символ "*" для определения того, что обработке подлежит часть строки, предшествующая указанному выражением. Я не знаю, как написать это по-человечески, вот что я имею ввиду:

К сожалению, "звёздочкой" нельзя указать, что отсечь надо часть строки после указанного выражения. Эта задача решается в два этапа:

  1. в отдельную переменную помещается строка, из которой удалено всё, что находится до ключевого выражения. Т.е. в ней остается "хвост", искомое выражение плюс всё, что после него.
  2. затем из оригинальной переменной удаляется значение переменной, полученной на первом шаге. Здесь потребуется вызов команды СALL:

Инструкция CALL необходима для разворачивания значения переменной, подлежащей замене. Без неё интерпретатор отработает неверно, и вот эта конструкция не сработает:

[code]echo %var1:%var%=%[/code]

Необходимо писать:

[code]call echo %var1:%var%=%[/code]

Не забывайте, что при использовании таких конструкций в командных файлах знаки процентов должны быть удвоены:

[code]rem Работаем внутри командного файла

call echo %%var1:%var%=%%[/code]

Поиск подстроки

Используя опыт, полученный выше, можно написать простейшую проверку вида "содержит/не содержит".

Например, вот так:

[code]set var1=Мама мыла рамуset var2=%var1:Мама=%

if NOT "%var1%" == "%var2%" (echo Подстрока найдена)[/code]

Или

[code]set var1=Мама мыла рамуset var2=%var1:Мама=%

if NOT "%var1%" == "%var2%" (echo Подстрока найдена)  else  (echo Подстрока не найдена) [/code]

Выделение подстроки из переменной

Для получения подстроки из строки командный интерпретатор предоставляет  такую конструкцию:

[code]set var2=%var1:~начальная_позиция%set var2=%var1:~начальная_позиция,-отбросить_символов_с_конца_строки%set var2=%var1:~начальная_позиция,длина%[/code]

Синтаксис очень простой, поэтому сразу перейдем к примерам.

Выделение подстроки с начиная определенной позиции

Выделение части строки, например, "середины"

Выделение определенного количества символов

Начальная позиции строки  - нулевая.

Работа с наборами "ключ - значение"

Здесь, в общем-то, тоже никакой магии нет. В основе разбора лежит всё та же рассмотренная выше замена подстроки на пустое значение.

Алгоритм действий такой:

  • Создается переменная, содежащая в себе значения вида <ключ><разделитель значения><значение><разделитель пары>. Назовем её условно "словарь".
  • В переменную, которая будет содержать значение, записывается всё, что следует после ключа. По аналоги с заменой части строки, нужно использовать звездочку перед выражением <ключ><разделитель значения>.
  • Полученный результат нужно "почистить", так как он может содержать в себе остаток словаря. Для этого прибегнем к хитрости и выполним составную команду.Предположим, мы в качестве разделителя пары словаря используем точку с запятой. Тогда мы сможем довольно изящно "убить" оставшуюся часть словаря, поместив его в комментарии командой rem.[code]set value=%value:;=&rem %[/code]После rem - пробел, это важно(rem /?)

Теперь практический пример:

Я надеюсь, эта информация оказалась для вас полезной и сэкономит вам время, если у вас появится задача обработки строк. Впрочем, тему я раскрыл не полностью, и если у вас есть какие-то дельные личные наработки и приёмы обработки строк в командном интерпретаторе Windows, я совсем не против увидеть их в комментариях.

Материалы по теме:

http://ss64.com/nt/

Форум о скриптах на OSZone - рекомендую.

Спасибо, что дочитали до конца.

 

winreview.ru

Работа с командной строкой ( CMD ) Windows

    Командная строка представляет собой программное средство ввода команд пользователем и получения результатов их выполнения на экране. В современных операционных системах семейства Windows, командную строку обеспечивает стандартное приложение cmd.exe, так же называемое командным процессором, интерпретатором команд и консолью. Приложение ”Командная строка” предоставляет пользователю текстовый интерфейс для ввода команд и получения результатов их выполнения. Фактически, командная строка является программным эмулятором классической консоли первых компьютерных систем, представляющей собой терминал с клавиатурой, используемый оператором в качестве средства общения с компьютером. Как и во времена первых компьютеров, командная строка поддерживает стандартное устройство ввода – клавиатуру, и стандартное устройство вывода – дисплей. Пользователь вводит команды с клавиатуры и получает результаты их выполнения на экране дисплея.

Запуск командной строки.

Для запуска командной строки можно воспользоваться одним из следующих способов:

Пуск - Выполнить (или клавиши Win+R) введите cmd и нажмите клавишу Enter;

Пуск - Все программы - Стандартные - Командная строка»;

Пуск - Поиск - Командная строка. Также, для запуска командной строки можно использовать заранее подготовленный ярлык, ссылающийся на исполняемый файл %SystemRoot%\system32\cmd.exe ( обычно – C:\Windows\system32\cmd.exe). Выполнение некоторых команд требует повышенных привилегий, поэтому, приложение командной строки должно быть запущено с использованием пункта контекстного меню ”Запуск от имени администратора”, вызываемого правой кнопкой мышки.

Настройка командной строки.

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

Страница, посвященная настройкам командного процессора CMD

Работа в командной строке предполагает ввод данных с клавиатуры, при чем, иногда довольно большого объема. Этот объем можно значительно сократить, используя некоторые приемы:

Использование буфера обмена.

Текст, выделенный в окне приложения, можно скопировать в буфер обмена, а также вставить его из буфера обмена в поле ввода. При стандартных настройках командной строки для выделения текста используется пункт ”Пометить” контекстного меню, вызываемого правой кнопкой мышки. При желании, в свойствах ярлыка, с помощью которого выполняется запуск можно включить режим выделения мышью:

В режиме выделения мышью, контекстное меню не используется, а текст выделяется с использованием левой кнопки мышки. Копирование и вставка выполняется при нажатии правой кнопки мышки. При включенном режиме ”Разрешить сочетания клавиш с CONTROL”, можно использовать стандартные сочетания клавиш:

- CTRL+C (CTRL+Insert) – скопировать выделенный текст.

- CTRL+V (Shift+Insert) – вставить выделенный текст.

Использование истории команд и горячих клавиш.

Для вызова ранее введенных команд используются клавиши со стрелками Стрелка Вверх - на одну команду назад и Стрелка Вниз - на одну команду вперед. Кроме того, можно использовать функциональные клавиши:

F1 - посимвольный вызов последней введенной команды. Каждое нажатие F1 приводит к последовательной подстановке в поле ввода одного символа из предыдущей команды.

F2 - копирование до символа. После нажатия на F2 на экране отображается запрос символа, до которого будет скопирована предыдущая команда. Например, если предыдущая команда была ping yandex.ru, и в качестве символа задана точка, то в строку ввода команды будет занесено ping yandex, если задан пробел, то - ping.

F3 - вызов предыдущей команды.

F4 - удалить до символа. Выполняется удаление текста от текущей позиции курсора до заданного символа.

F5 и F8 - вызов буфера ранее введенных команд. Вывод по нажатию клавиши F5 прекращается когда будет отображена первая введенная команда текущей сессии.

F7 - отображение ранее введенных команд в отдельном окне в виде списка. Для выполнения нужной команды нужно выбрать ее, используя клавиши со стрелками, и нажать ENTER

F9 - выполнить команду, номер которой запрашивается. Номер команды в списке истории можно получить при использовании F7.

В Windows 10 / Windows Server 2016 появились возможности, отсутствующие в предыдущих реализациях командной строки:

- Изменение прозрачности окна консоли при нажатии комбинаций CTRL+Shift+- или CTRL+Shift++.

- Включение / выключение полноэкранного режима при нажатии CTRL+Enter.

- Расширение возможностей выделения текста и редактирования:

Shift+Home – выделить текст от текущего положения курсора до начала строки.

Shift+End – выделить текст от текущего положения курсора до конца строки.

- Быстрое перемещение по буферу экрана и поиск по контексту:

CTRL+Home – перейти в начало буфера экрана

CTRL+End – перейти в конец буфера экрана.

CTRL+Стрелка Вверх - перемещение на 1 строку вверх.

CTRL+Стрелка Вниз - перемещение на 1 строку вниз.

CTRL+F - открыть диалог поиска текста в буфере экрана.

Окно командной строки в Windows 10 можно закрыть с помощию стандартной комбинации клавиш - ALT+F4.

Для отключения новых возможностей CMD, необходимо в свойствах приложения установить галочку ”Использовать прежнюю версию консоли (требуется перезапуск)”

Автодополнение путей файлов

В командной строке Windows можно выполнять подстановку имен файлов и каталогов при нажатии клавиши Tab. Например, для перехода, в каталог с длинным именем Program Files наберите начальную часть имени каталога

CD Pro и нажмите Tab. В строке ввода должна появиться команда :

CD "Program Files"

Как видим, выполняется подстановка недостающей части имени каталога, а в тех случаях, когда в нем имеется символ пробела, добавляются еще и двойные кавычки.

Если имеется несколько совпадающих начальных частей имен файлов или каталогов, при каждом нажатии клавиши Tab будет подставляться следующее по алфавитному порядку имя. Для возврата на предыдущее - используется комбинация Shift+Tab

Перенаправление данных стандартного ввода /вывода консоли.

Как уже упоминалось, в качестве стандартного устройства ввода командной строки используется клавиатура, а в качестве устройства вывода – дисплей. Однако, существует возможность перенаправления ввода-вывода на другие устройства c использованием операторов перенаправления:

  • > - перенаправление вывода. Выходные данные записываются в файл или передаются на указанное устройство.

    ping –n 5 localhost > nul - выполнить пинг петлевого интерфейса 5 раз с перенаправлением вывода в фиктивное устройство nul. Вывод результатов выполнения команды подавляется. Подобный прием используется для организации задержки в командных файлах, поскольку пинг петлевого интерфейса выполняется почти мгновенно, а интервал между пингами равен одной секунде, время выполнения данной команды определяется значением параметра -n

    ping –n 100 yandex.ru > C:\ping-ya.txt - выполнить 100 раз пинг узла yandex.ru c записью результатов выполнения команды в файл C:\ping-ya.txt. Если файл не существует, он будет создан, а если существует, его содержимое будет затерто.

  • >> - то же, что и в предыдущем случае, но данные записываются в конец файла.

    ping –n 100 yandex.ru >> C:\ping-ya.txt - то же, что и в предыдущем примере, но, если файл не существует, то он будет создан, а если существует, то запись результатов будет выполняться в конец файла.

  • - перенаправление ввода. Данные считываются не с клавиатуры, а из файла или другого устройства.

    cmd - запустить командный процессор CMD и выполнить ввод данных из файла 1.txt. Если в файле поместить строку ping –n 100 yandex.ru, то выполнится команда, рассмотренная выше.

  • | - вывод первой команды перенаправить на вход следующей за ней.

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

    ping -n 100 microsoft.com | find "Превышен интервал" - результат выполнения команды ping -n 100 microsoft.com передается в виде входных данных для команды поиска строк (find), содержащих текст "Превышен интервал".

    ping -n 100 microsoft.com | find "Превышен интервал" > C:\ping-ya.txt - то же, что и в предыдущем примере, но с перенаправлением выводимых результатов выполнения команды в текстовый файл.

  • Использование дескрипторов ввода-вывода консоли.

    Каждому открытому файлу или устройству соответствует свой дескриптор ( handle) который представляет собой неотрицательное число, значение которого используется породившим поток ввода-вывода процессом. По умолчанию, для всех процессов, в том числе и для командного интерпретатора cmd.exe :

    0 ( STDIN ) – дескриптор стандартного ввода (ввод с клавиатуры).

    1 (STDOUT) – дескриптор стандартного вывода (вывод на экран).

    2 (STDERR) – дескриптор вывода диагностических сообщений (сообщений об ошибках на экран).

    Дескрипторы можно использовать в тех случаях, когда требуется перенаправить (изменить) источники и приемники данных в стандартных потоках ввода-вывода. Например:

    ping.exe –n 100 yandex.ru 2> C:\pinglog.txt - стандартный поток сообщений программы ping.exe будет выводиться на экран, а ошибки ( стандартны

  • ab57.ru

    Настройка командной строки Windows

    &nbsp &nbsp Интерпретатор команд, он же командный процессор, он же приложение "Командная строка", можно запустить несколькими способами:

    - Через главное меню – ”Все приложения” - “Стандартные” – ”Командная строка”

    - Через меню Пуск - Выполнить - cmd.exe

    - Комбинация клавиш Win+R - cmd.exe

    - Комбинация клавиш Win+X - Командная строка (только в Windows 8 и более поздних)

    - Через поиск приложения cmd.exe

    Стандартное окно командной строки – это окно с символами белого цвета на черном фоне. Параметры шрифтов, цвет и фон символов, использование буфера обмена и прочие свойства командной строки можно изменить в соответствии со своими предпочтениями.

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

    Настройка командной строки через изменение свойств приложения (ярлыка для запуска приложения).

    1. Откройте окно Командная строка.

    2. Щелкните указателем мышки левый верхний угол окна и в открывшемся меню выберите пункт Свойства.

    3. Выберите вкладку Общие.

    4. В области Запоминание команд можно изменить размер буфера под историю команд. Если есть необходимость, выберите или введите новое значение (до 999 в поле Размер буфера, а затем выберите или введите число (до 5) в поле Количество буферов. Увеличение размера буфера под запоминание команд может пригодиться в тех случаях, когда в течении сессии приходится вводить большое количество текста. Клавиши Стрелка вверх и Стрелка вниз позволяют вызывать ранее набранные и сохраненные в буфере команды. Для того, чтобы в буфере не запоминались одинаковые команды, можно включить флажок Отбрасывать повторения. Значения размера буфера и количество буферов могут обличаться для разных версий Windows.

    5. В области Правка установите флажки Выделение мышью и Быстрая вставка. Флажок Выделение мышью позволяет копировать и вставлять данные в окне командной строки с использованием мышки. Чтобы скопировать, выделите левой кнопкой текст в окне командной строки и нажмите правую кнопку мыши. Чтобы выполнить вставку в командную строку или текстовый файл, щелкните правой кнопкой мыши. Можно вместо выделения мышью, использовать стандартный режим, вызываемый через контекстное меню правой кнопкой мышки. Выбирается пункт Пометить, выделяется копируемый текст и нажимается правая кнопка мышки, которая используется и для копирования и для вставки. Стандартные комбинации клавиш для копирования и вставки в командной строке не работают, за исключением Windows 10 / Sever 2016

    При желании, можно изменить вид и размер шрифта, цвет символов и фона, расположение и размер окна командной строки. Например, для того, чтобы в окне командной строки отображались символы черного цвета на белом фоне, нужно установить значение цвета символов, равное 0, а значение цвета фона - 255

    В диалоговом окне Изменение свойств (если оно присутствует в данной версии Windows) выберите вариант Сохранить свойства для других окон с тем же именем.

    Особенности командной строки в Wimdows 10 и Windows Server 2016

    Настройки командной строки в Windows 10 (Windows Server 2016) немного отличаются от настроек предыдущих версий Windows.

    При включенном флажке ”Использовать прежнюю версию консоли (Требуется перезапуск)”, настройки ничем не отличаются от тех, что применялись в среде предыдущих версий Windows. В новой же версии консоли, появляются дополнительные настройки - становятся доступными для включения флажки параметров, отсутствовавших в более ранних версия системы. Новые возможности в значительной степени облегчают обработку текста в окне консоли и позволяют использовать большинство стандартных сочетаний клавиш для копирования, вставки и редактирования. Так, например, при включенном режиме ”Разрешить сочетания клавиш с CONTROL”, можно использовать стандартные сочетания клавиш, принятые в среде ОС:

    - CTRL+C (CTRL+Insert) – скопировать выделенный текст.

    - CTRL+V (Shift+Insert) – вставить выделенный текст.

    Часть настроек ориентирована на расширение возможностей при использовании выделения текста, обработки строк, истории команд, динамического изменения внешнего вида и управления перемещением курсора, прозрачностью окна и т.п. с поддержкой множества горячих клавиш. Подробнее о новых возможностях командной строки в Windows 10 рассказывается в статье Работа в командной строке ( CMD ) Windows.

    Настройка командной строки изменением параметров в реестре Windows.

    Изменение внешнего вида и некоторых свойств командной строки можно выполнить не только с помощью определенных ключей при запуске cmd.exe, но и изменив параметры реестра, предназначенные для командного процессора в разделах:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor - для всех пользователей.

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\ - для текущего пользователя.

    HKEY_CURRENT_USER\Console\ - дополнительно для текущего пользователя.

    Параметры командной строки при запуске CMD.EXE имеют наивысший приоритет, а пользовательские настройки ( раздел реестра HKEY_CURRENT_USER ) имеют приоритет над настройками для компьютера ( раздел реестра HKEY_LOCAL_MACHINE ).

    Одной из наиболее полезных настроек является изменение обработки вводимой командной строки таким образом, чтобы можно было выполнять подстановку имен файлов и каталогов при нажатии специальной клавиши, как это реализовано в командной оболочке Unix-подобных операционных систем. Так например, для перехода в каталог home не обязательно набирать команду :

    cd /home

    а достаточно ввести cd /h и нажать специальную клавишу Tab - недостающая часть имени ( ome ) будет подставлена в качестве параметра команды смены каталога. Очень полезная возможность при наборе длинных имен файлов и каталогов.

    Аналогичным образом можно настроить и командную строку Windows. Запустите редактор реестра и перейдите в раздел

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor

    В современных ОС семейства Windows режим автодополнения путей при нажатии клавиши Tab уже настроен, но при необходимости, его можно перенастроить или восстановить.

    Код символа Tab равен шестнадцатеричному числу 9 и его нужно задать в формате REG_DWORD для параметров CompletionChar и PathCompletionChar ( например, в Windows XP, значение 0x40 заменить на 0x9 ). Теперь, после перезапуска приложения командной строки, оцените преимущества подстановки части имен, выполнив следующие действия:

    - перейти в корень диска C: CD C:\

    - для перехода, например в каталог с длинным именем Program Files наберите

    CD Pro и нажмите Tab. В строке ввода должна появиться команда :

    CD "Program Files"

    Как видим, кроме того, что выполняется подстановка недостающей части имени каталога, в тех случаях, когда в нем имеется символ пробела, добавляются еще и двойные кавычки.

    Если имеется несколько совпадающих начальных частей имен файлов или каталогов, при каждом нажатии клавиши Tab будет подставляться следующее по алфавитному порядку имя. Для возврата на предыдущее - используется комбинация Shift+Tab

    Правка реестра позволяет также изменить внешний вид окна командной строки, например, цвет фона и цвет символов, как это выполняется с помощью команды COLOR или ключа /T при запуске CMD.EXE. Расцветку определяют параметры

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\DefaultColor - для всех пользователей.

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DefaultColor - для текущего пользователя.

    Значения параметров из раздела пользователя имеют больший приоритет, по сравнению с параметрами раздела HKEY_LOCAL_MACHINE

    Если параметр DefaultColor имеет значение по умолчанию ( REG_DWORD 0x00000000 ), то цветовой набор определяется значением параметра

    HKEY_CURRENT_USER\Console\ScreenColors.

    На практике, изменение цвета фона окна и цвета символов лучше всего задавать значением параметра типа REG_DWORD:

    HKEY_CURRENT_USER\Console\ScreenColors.

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

    Бит 0 - яркость Бит 1 - красный ( R ) Бит 2 - зеленый ( G ) Бит 3 - синий ( B )

    Значения битов задают комбинацию цветов, так например, для желтого цвета используется установка битов 1 и 2 ( Красный и Зеленый). Старшие 4 бита ( тетрада ) определяют цвет фона, младшие - цвет текста. Каждая цифра тетрады может иметь следующие значения:

    0 = Черный 1 = Синий 2 = Зеленый 3 = Голубой 4 = Красный 5 = Лиловый 6 = Желтый 7 = Белый 8 = Серый 9 = Светло-синий A = Светло-зеленый B = Светло-голубой C = Светло-красный D = Светло-лиловый E = Светло-желтый F = Ярко-белый

    Примеры значений параметра ScreenColors:

    F0 - "консоль наоборот” - черные символы на белом фоне.

    20 - зеленый фон, черные символы.

    A0 - яркий зеленый фон, черные символы.

    9F - яркий синий фон, яркие белые символы.

    Использование истории вводимых команд.

    При работе в командной строке удобно использовать, полностью или частично, ранее введенные команды. Для вызова ранее введенных команд используются клавиши со стрелками Стрелка Вверх - на

    ab57.ru

    Конкатенация значений переменных среды в одну строку в cmd bat файлах

    Вопрос: Переменные среды в командной строке

    Переменные среды

    Автор: specialist, Вадим Стеркин aka Vadikan

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

    Классификация переменных среды

    Справка Windows различает два типа переменных среды: системные и локальные. Системные переменные возвращают одинаковые значения для всех пользователей. К примеру, %systemdrive% - буква системного диска, и она для всех пользователей одинакова. А вот значения, возвращаемые локальными переменными, варьируются в зависимости от вошедшего в систему пользователя. Например, %userprofile% может возвращать C:\Documents and Settings\ТекущийПользователь, где ТекущийПользователь - название учетной записи пользователя.

    Узнать, какие переменные среды в операционной системе вам доступны и какие значения в данный момент им присвоены, вам поможет команда SET, запущенная из командной строки без параметров (Пуск – Выполнить – cmd – set). В рамках данной статьи нас интересуют переменные, обозначающие путь к различным папкам (каталогам). Чуть подробнее о некоторых из них ниже:

    ПеременнаяТипОписание
    %SYSTEMDRIVE%СистемнаяВозвращает имя диска, содержащего корневой каталог операционной системы /2003 (т. е. системный корневой каталог).
    %SYSTEMROOT%, %WINDIR%СистемнаяВозвращает размещение корневого каталога операционной системы Windows /2003
    %PATH%СистемнаяУказывает путь для исполняемых файлов.
    %PROGRAMFILES%СистемнаяУказывает путь к каталогу установки программ (Program Files)
    %COMMONPROGRAMFILES%СистемнаяУказывает путь к общему каталогу программ (Program Files\Common Files).
    %TEMP% и %TMP%Системная и пользовательскаяВозвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.
    %USERPROFILE%ЛокальнаяВозвращает размещение профиля для текущего пользователя.
    %ALLUSERSPROFILE%ЛокальнаяВозвращает размещение профиля "All Users".
    %CD%ЛокальнаяВозвращает путь к текущей папке.
    %APPDATA%ЛокальнаяВозвращает используемое по умолчанию размещение данных приложений.
    Использование переменных в пакетных файлах

    Начнем с простенького примера:

    Код Code
    1 2 3 DEL /F /Q "%AllUsersProfile%\Главное меню\Активация Windows.lnk" DEL /F /Q "%AllUsersProfile%\Главное меню\WindowsUpdate.lnk" DEL /F /Q "%systemroot%\system32\*.scr"
    В этом примере я удаляю вышеуказанные ярлыки, которые маячат перед глазами в меню Пуск, используя переменную %AllUsersProfile%, а также все файлы с расширением SCR из директории Windows\system32, используя переменную %SystemRoot%. Вместо DEL /F /Q, как вы понимаете, может быть все что угодно: от команды копирования COPY до команды запуска установки нужного нам приложения со всеми параметрами командной строки, если это потребуется.

    Во всех командах я специально использовал "кавычки" – это не случайно. Весь путь, включая переменные, надо заключать в кавычки, если вы используете пути, содержащие пробелы. Даже если сама переменная кавычек не содержит, после ее разбора системой в пути могут появится пробелы (например, %ProgramFiles% в C:\Program Files). В любом случае кавычки лучше использовать – это является хорошим тоном оформления командных файлов.

    Как задать свои переменные

    Разобранный выше пример использовал уже существующие переменные среды. И вы, вероятно, обратили внимание на символы процентов, окружающие названия переменных. Эти символы нужны для того, чтобы разрешить подстановку значений переменной в командной строке или в пакетном файле. Символы процентов указывают на то, что должна обратиться к значениям переменных, а не делать посимвольное сравнение. Ниже вы увидите, как это работает. Задать свои переменные в пакетном файле можно командой SET.

    Команда SET Вы можете задать в командном файле свои переменные при помощи все той же команды SET.

    Чтобы добавить переменную, введите в командной строке:

    Код Code
    1 set имя_переменной=значение
    Чтобы отобразить переменную, введите в командной строке:
    Код Code
    1 set имя_переменной
    Чтобы удалить переменную, введите в командной строке:
    Код Code
    1 set имя_переменной=
    Например,
    Код Code
    1 SET mydir=D:\Files\Work
    задает переменную mydir, которая будет возвращать путь к указанной папке. Подробнее о команде вы можете прочитать из set /?.

    Важное примечание: переменные, задаваемые командой set, действуют лишь на протяжении командной сессии (см. ниже), в которой они были заданы.

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

    Пример назначения переменных в файле RunOnceEx.cmd, импортирующем параметры в реестр

    Код Code
    1 2 3 4 5 6 7 8 9 10 @echo off SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx SET i=100   REG ADD %KEY% /V TITLE /D "Installing Applications" /f   REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f REG ADD %KEY%\%i% /V 2 /D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f SET /A i+=1
    В данном скрипте командой SET задаются две переменных - %i% и %KEY%. Обратите внимание, что задаются они без символов процентов, а вот для обращения к ним %% уже нужны. Переменная %KEY% служит для упрощения и оптимизации кода. Она остается неизменной на протяжении текущей командной сессии, что избавляет от необходимости каждый раз включать в код раздел реестра. Каждый раз, когда в коде встречается %KEY%, будет происходить ее замена на HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx. А вот %i% служит для последовательной нумерации разделов реестра. При начальном значении 100 переменная увеличивается на единицу при помощи команды SET /A i+=1 после каждого блока команд, что дает последовательность 100, 101, 102 и т.д. Таким образом, строка
    Код Code
    1 REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f
    на самом деле отработает так
    Код Code
    1 REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100 /V 1 /D "C:\install\Software\WinRar.exe /s" /f
    Обратите внимание, что во фрагменте файла также используется системная переменная %systemdrive%, которая соответствует букве системного диска.

    Пример назначения переменных в командном файле, устанавливающем приложение с CD:

    Код Code
    1 2 for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i: start /wait “%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe”
    В этом примере для всех перечисленных дисков происходит поиск определенного файла (WIN51). В случае его обнаружения на одном из дисков, последнему присваивается переменная %CDROM%, а далее уже происходит установка программного обеспечения с использованием пути, заданного созданной переменной.

    Изменение переменных среды и добавление собственных переменных

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

    Утилита setenv Утилита работает из командной строки (, ). Работать с утилитой очень просто (setenv /?).

    Пользовательские настройкиsetenv -u имя_переменной значение
    Системные настройкиsetenv -m имя_переменной значение
    Настройки Default Usersetenv -d имя_переменной значение
    Настройки текущего пользовательского сеансаsetenv -v имя_переменной значение
    Допустим, если нужно получить переменную %temp% еще на стадии установки, то можно это проделать из , например:
    Код Code
    1 2 3 4 :: Creating and Setting Temp folder... md %systemdrive%\Temp setenv -u Temp %systemdrive%\Temp setenv -u Tmp %systemdrive%\Temp
    Утилита удобна тем, что после задания переменной ею можно пользоваться сразу. Ну почти сразу - в следующей командной сессии. Чтобы использовать ее в текущей сессии, можно задействовать старую знакомую команду set:
    Код Code
    1 2 3 :: Creating #EgOrus# var set EgOrus=D:\EgOrus setenv -u EgOrus %EgOrus%
    Импорт параметров в реестр

    Если же пойти путем внесения изменений в реестр после первого входа в систему, то переменные начнут "работать" только после перезагрузки или завершения пользовательского сеанса. Конечно, в процессе автоустановки можно импортировать желаемые параметры на Т-12 (см. статью ) и обойти данную проблему. Если же вы не собираетесь использовать назначенную переменную в текущем пользовательском сеансе, то импорт в реестр вас тоже может устроить. Процесс импорта REG-файлов описывать повторно не буду, а рассмотрю команду REG ADD на конкретном примере.

    Допустим, вы заинтересованы иметь в системе переменную %CDROM% на постоянной основе и установить ее в процессе установки приложений с CD. Следуя коду, приведенному выше, нужно после определения переменной назначить ее системной.

    Код Code
    1 2 for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i: REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v cdrom /d %CDROM% /f
    После нахождения файла WIN51 диску, на котором он был найден, присваивается локальная переменная %CDROM%, которая тут же и назначается в виде постоянной системной переменной посредством импорта в реестр. Этот метод предложил в одной из тем на конференции Oszone . Заодно вы узнали. где в реестре хранятся настройки системных переменных. Настройки пользовательских переменных хранятся в HKCU\Environment. Пути, возвращаемые переменными %PROGRAMFILES% и %COMMONPROGRAMFILES%, можно посмотреть в параметрах ProgramFilesDir и CommonFilesDir в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion, но менять их там не следует. Каталоги установки программ (отличные от %SystemDrive%\Program Files) нужно конфигурировать через .

    Резюме

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

    Терминология

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

    cmd.exe - интерпретатор команд, который командная оболочка ОС Windows использует для перевода введенной команды в формат, понятный системе.

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

    Пользовательский сеанс (пользовательская сессия) начинается с момента входа пользователя в систему (log on) и завершается при выходе (log off).

    forundex.ru