Справка по переменным среды Windows. Все команды по алфавиту


    Команда SETLOCAL используется для временного изменения значений переменных среды в командных файлах Windows. Изменения среды, внесенные после выполнения команды SETLOCAL, являются локальными относительно текущего пакетного файла. Для восстановления их прежних значений необходимо выполнить команду ENDLOCAL. При достижении конца пакетного файла автоматически выполняется команда ENDLOCAL для всех действующих команд SETLOCAL, выполненных в этом пакетном файле и значения всех переменных окружения восстанавливаются к состоянию до выполнения команды SETLOCAL.

Формат командной строки:

SETLOCAL | ENABLEDELAYEDEXPANSION | DISABLEDELAYEDEXPANSION

Изменение команды SETLOCAL при включении расширенной обработки команд:

Команда SETLOCAL принимает необязательные аргументы: ENABLEEXTENSIONS или DISABLEEXTENSIONS. Это позволяет включить или отключить расширенную обработку команд до выполнения команды. См. CMD /? для подробного объяснения. ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION включает или отключает отложенное расширение переменной среды. См. SET /? для подробного объяснения. Эти изменения действуют до совпадения команды ENDLOCAL, независимо от исходного состояния до вызова команды SETLOCAL.

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

VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Не удается включить расширенную обработку

Эта группа команд работает, так как в прежних версиях CMD.EXE команда SETLOCAL не устанавливает значение ERRORLEVEL. Команда VERIFY с недопустимым аргументом необходима для установки ненулевого значения ERRORLEVEL.

При использовании переменных окружения в командных файлах существует определенное ограничение, связанное с тем фактом, что присваиваемое значение остается без изменения при его модификации внутри группы команд, задаваемой скобками, например в командах IF или FOR . Для обхода данного ограничения используется запуск командного процессора с параметром /V:ON и вместо знаков процента, для получения принимаемого переменной значения, используются восклицательные знаки. Кроме того, существует возможность использовать стандартный запуск командного процессора, но с локальным включением данного режима командой:

Разница в результатах использования значений переменных довольно наглядно демонстрируется следующим командным файлом:


@ECHO OFF
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo Со знаком процента=%VAR% , Со знаком вопроса=!VAR!

Команда set VAR=after выполняется внутри подпрограммы, ограниченной скобками и, если убрать команду Setlocal EnableDelayedExpansion или не использовать для получения значения переменной VAR восклицательные знаки, ее значение останется старым (тем, что было установлено до входа в подпрограмму). Аналогичная же проблема наблюдается и тогда, когда значение переменной изменяется внутри цикла команды FOR . Например, для получения списка файлов текущего каталога такой командный файл не будет работать:

set LIST=
for %%i in (*) do set LIST=%LIST% %%i
echo %LIST%

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

Setlocal EnableDelayedExpansion
set LIST=
for %%i in (*) do set LIST=!LIST! %%i
echo %LIST%
Теперь, значение переменной LIST внутри цикла FOR будет изменяться, последовательно принимая значения имен файлов, разделенных пробелом ( set LIST=!LIST! %%i )

div.main {margin-left: 20pt; margin-right: 20pt}
Консольные команды Windows NT

Изначально многие пользователи NT не пользуются теми возможностями, которые предоставляют команды консоли, либо используют их не полностью.

В этом материале я хотел бы описать основные моменты работы с консолью. Для чего, вы спросите, это нужно? Знание основных команд позволяет автоматизировать работу, используя их в командных файлах, ну а при работе с сетью многие из них незаменимы. Все изложенное будет относиться в основном к Windows XP, но вполне может быть применимо к другим версиям NT (4, 2000), правда, уже с некоторыми ограничениями.
В основе NT лежат несколько другие принципы, чем в Win9x. Однако MS-DOS также присутствует, правда, только в качестве виртуальной машины (NT Virtual DOS Machine, NTVDM). Фактически это режим командной строки, с помощью которой вводятся и выполняются утилиты и пакетные файлы.
Доступ к командной строке можно получить через меню Пуск/Программы/Стандартные/Командная строка.
Основным интерпретатором командной строки в NT является cmd.exe, основным - это потому, что присутствует и стандартный интерпретатор команд MS-DOS - command.com.
Запустив cmd.exe (через меню либо Пуск/Выполнить/cmd.exe), получаем окно, в котором можно работать с командной строкой. Причем, находясь уже в открытом командном окне, можно запустить еще несколько версий cmd. Для завершения работы текущей версии можно воспользоваться командой EXIT.
Существует два режима работы cmd.exe - расширенный и стандартный. Расширенный режим работает со следующими командами:
DEL или ERASE; COLOR; CD или CHDIR; MD или MKDIR; PROMPT; PUSHD; POPD; SET; SETLOCAL; ENDLOCAL; IF; FOR; CALL; SHIFT; GOTO; START (изменен также вызов внешних команд); ASSOC; FTYPE.

Команда CMD
Общий синтаксис команды:
CMD [ команда]
/C(/K) - Выполнение указанной команды с/без последующего завершения.
Выполнение указанной команды без последующего завершения.
/S - Изменение поведения после /C или /K (см. ниже).
/Q - Отключение режима вывода команд на экран (ECHO).
/D - Отключение выполнения команд AutoRun из реестра (см. ниже).
/A (/U) - Вывод результатов выполнения команд в формате ANSI/UNICODE.
/T:цв - Выбор цвета текста/фона (более подробно см. описание COLOR ниже).
/E:ON(/E:OFF) - Разрешение/запрет расширений команд (см. ниже).
/F:ON(/F:OFF) - Разрешение/запрет символов завершения имен файлов и папок (см. ниже).
/V:ON(/V:OFF) - Разрешение/запрет отложенного расширения переменных среды с применением символа "!" в качестве разделителя. Например, /V:ON разрешает использовать!var! в качестве расширения переменной var во время выполнения. Синтаксис var служит для расширения переменных при вводе, что приводит к совсем другим результатам внутри цикла FOR.
Параметр COLOR. Атрибуты цветов задаются в виде ДВУХ шестнадцатеричных цифр - первая задает цвет фона, а вторая определяет цвет текста. Каждая цифра может иметь следующие значения: 0=черный, 1=синий, 2=зеленый, 3=голубой, 4=красный, 5=лиловый, 6=желтый, 7=белый, 8=серый, 9=светло-синий, А=светло-зеленый, В=светло-голубой, C=светло-красный, D=светло-лиловый, E=светло-желтый, F=ярко-белый.
Если аргумент не указан, команда восстанавливает исходный выбор цветов, каким он был на момент запуска CMD.EXE. Это значение извлекается из текущего текстового окна, из значения ключа /T или из значения параметра реестра DefaultColor.
Команда COLOR возвращает значение кода ошибки ERRORLEVEL 1 при попытке вызова этой команды с совпадающими значениями цвета текста и цвета фона.
Пример: "COLOR fc" задает светло-красный текст на ярко-белом фоне.
Чтобы указать в одной строке несколько команд, следует разделить их символами "&&" и заключить в кавычки. Кроме того, из соображений совместимости, /X означает то же, что и /E:ON, /Y - то же, что и /E:OFF, и /R - то же, что и /C. Все прочие ключи командной строки игнорируются.
Если указаны ключи /C или /K, то остальная часть командной строки после такого ключа обрабатывается как командная строка, а обработка символов кавычек (") ведется по следующим правилам:
1. Если выполняются все перечисленные ниже условия, то символы кавычек в командной строке сохраняются:
- ключ /S отсутствует;
- есть ровно два символа кавычек;
- между ними нет других специальных символов, как то: &<>()@^|;
- между ними имеются один или несколько пробелов;
- строка, заключенная в кавычки, является именем исполняемого файла.
2. В противном случае проверяется первый символ, и если он является символом кавычек, то он удаляется, также удаляется последний символ кавычек в командной строке, а весь текст после этого последнего символа кавычек сохраняется.
Если ключ /D не указан в командной строке, то при запуске CMD.EXE выполняется проверка значений переменных REG_SZ или REG_EXPAND_SZ для следующих разделов системного реестра:
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorAutoRun
и/или
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun
и если одна из них или обе они присутствуют, то сначала выполняются они.
По умолчанию расширенная обработка команд включена. Чтобы запретить расширенную обработку для конкретного вызова, используется ключ /E:OFF.
Можно включить или отключить расширенную обработку команд для всех вызовов CMD.EXE на данном компьютере или для данного пользователя, с помощью REGEDT32.EXE задав значения REG_DWORD в системном реестре для разделов:
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorEnableExtensions
и/или
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorEnableExtensions,
равными 0x1 или 0x0. Параметры пользователя перекрывают параметры компьютера.
Ключи командной строки, в свою очередь, перекрывают параметры реестра.
Отложенное расширение переменных среды по умолчанию не включено. Его можно включить или отключить для конкретного вызова CMD.EXE с помощью ключей /V:ON или /V:OFF, или же с помощью REGEDT32.EXE задав значения REG_DWORD в системном реестре для разделов:
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorDelayedExpansion
и/или
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorDelayedExpansion
равными 0x1 или 0x0. Параметры пользователя, как уже говорилось выше, перекрывают параметры компьютера, также и ключи командной строки, в свою очередь, перекрывают параметры реестра.
Если отложенное расширение переменных среды включено, то символ "!" (восклицательный знак) может использоваться для замены текущего значения переменной среды во время выполнения.
Включение/выключение отложенного расширения переменных среды для всех вызовов CMD.EXE на данном компьютере или для данного пользователя возможно с помощью REGEDT32.EXE при значении REG_DWORD в системном реестре для следующих разделов:
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorCompletionChar,
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorPathCompletionChar
и/или
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorCompletionChar,
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorPathCompletionChar,
установив их шестнадцатеричные значения равными коду управляющего символа, используемого для конкретной функции (например, 0x4 для Ctrl-D или 0x6 для Ctrl-F). Опять же, параметры пользователя перекрывают параметры компьютера; ключи командной строки, в свою очередь, перекрывают параметры реестра.
Завершение имен файлов и папок также не включено по умолчанию. Это можно исправить с помощью ключей /F:ON или /F:OFF.
Если завершение включено с помощью ключа командной строки /F:ON, то используются два управляющих символа: Ctrl-D для имен папок и Ctrl-F для имен файлов. Чтобы отключить конкретный символ завершения в системном реестре, в качестве кода специального символа используется шестнадцатеричное значение символа пробела (0x20).
Завершение вызывается при вводе одного из этих двух специальных символов. Функция завершения берет строку пути слева от точки ввода, дописывает к ней символ шаблона, если таковой отсутствует, а затем строит список путей, которые соответствуют полученному определению. После этого выводится первый элемент этого списка соответствующих путей. Если же список пуст, то подается звуковой сигнал и ничего не выводится.
После этого повторный ввод того же самого специального символа приводит к циклическому перебору всех соответствующих путей. Нажатие клавиши при вводе управляющего символа позволяет просматривать список путей в обратном порядке. Если изменить выведенный путь, а затем снова ввести управляющий символ, сохраненный список очищается и строится новый список путей. То же самое происходит, если переключиться с одного символа завершения на другой. Единственное отличие при использовании символа завершения файла состоит в том, что при этом для построения списка соответствия берется и путь, и имя файла, а при использовании символа завершения папки - только путь. Если символ завершения используется в одной из встроенных команд манипулирования папками (CD, MD или RD), то всегда подразумевается символ завершения папок.
Символ завершения правильно работает и с именами файлов, содержащими пробелы или иные специальные символы, если при этом строка соответствия заключена в кавычки. Кроме того, если сместить точку ввода влево, а затем использовать символ завершения внутри строки, оставшийся справа от точки ввода текст будет отброшен.
Специальные символы, которые требуют обязательного заключения в кавычки:
<пробел>&(){}^=;!"+,`~

Команда PROMT
Изменение приглашения командной строки cmd.exe.
PROMPT [текст], где текст - новое приглашение командной строки. Приглашение может включать обычные символы и следующие коды:
$A - & (амперсанд);
$B - | (вертикальная черта);
$C - ((левая круглая скобка);
$D - Текущая дата;
$E - ESC (символ ASCII с кодом 27);
$F -) (правая круглая скобка);
$G - > (знак "больше");
$H - BACKSPACE (удаление предыдущего символа);
$L - < (знак "меньше");
$N - Текущий диск;
$P - Текущие диск и каталог;
$Q - = (знак равенства);
$S - (пробел);
$T - Текущее время;
$V - Номер версии Windows XP;
$_ - Возврат каретки и перевод строки;
$$ - $ (символ доллара).
Когда расширенная обработка команд включена, то команда PROMPT поддерживает следующие дополнительные символы форматирования:
$+ - отображение нужного числа знаков плюс (+) в зависимости от текущей глубины стека каталогов PUSHD, по одному знаку на каждый сохраненный путь;
$M - отображение полного имени удаленного диска, связанного с именем текущего диска, или пустой строки, если текущий диск не является сетевым. Например, если диск E: подключен к сетевому ресурсу \ServerPrograms, то при команде PROMT $M$P$G формат приглашения командной строки будет следующий: \ServerPrograms E:>.


Вывод, задание и удаление переменных среды cmd.exe.

SET [переменная=[строка]]

переменная Имя переменной среды.
строка Строка символов, присваиваемая указанной переменной.

Введите SET без параметров для вывода текущих переменных среды.

Изменение команды SET при включении расширенной обработки команд:

Если при вызове указать только имя переменной без знака равенства и значения,
команда SET выведет значения всех переменных, имя которых начинается
с указанной строки. Например:

SET P

Эта команда выведет значения всех переменных, имена которых начинаются с "P ".

Если имя переменной не найдено в текущей среде, при возврате команда SET
установит значение ошибки ERRORLEVEL 1.

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

Команда SET поддерживает два дополнительных ключа:

SET /A выражение
SET /P variable=

Ключ /A указывает, что строка справа от знака равенства является числовым
выражением, значение которого вычисляется. Обработчик выражений очень
прост и поддерживает следующие операции, перечисленные в порядке убывания
приоритета:


При использовании любых логических или двоичных операторов необходимо
заключить строку выражения в кавычки. Любые нечисловые строки в выражении
рассматриваются как имена переменных среды, значения которых преобразуются
в числовой вид перед использованием. Если переменная с указанным именем
не определена в системе, вместо нее подставляется нулевое значение. Это
позволяет выполнять арифметические операции со значениями переменных среды,
причем не нужно вводить знаки % для получения значений. Если команда
SET /A вызывается из командной строки, а не из пакетного файла, она выводит
окончательное значение выражения. Слева от любого оператора присваивания
должно стоять имя переменной среды. Числовые значения рассматриваются как
десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел,
и 0 для восьмеричных чисел. Например, числа 0x12,
и 022 обозначают десятичное число 18. Обратите внимание на запись
восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в
восьмеричной системе исчисления цифры 8 и 9 не используются.

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

Подстановка переменной среды может быть расширена следующим образом:

%PATH:str1=str2%

расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в
расширенном результате на "str2". "str2" может быть пустой строкой для
эффективного удаления вхождений "str1" из расширенного вывода. "str1" может
начинаться со звездочки, и в этом случае это будет соответствовать любому
началу расширенного вывода до первого вхождения оставшейся части "str1".

Можно также использовать строки расширения.

%PATH:~10,5%

расширит действие переменной среды PATH, затем использует только 5
символов, которые начинаются с 11-го символа (пропустив 10) расширенного
результата. Если длина не указана, по умолчанию используется оставшееся
значение переменной. Если оба значения (длина и число пропускаемых символов)
отрицательны, следующим используемым значением будет длина значения переменной
среды, добавленной к указанному значению пропуска или указанной длины.

%PATH:~-10%

извлечет последние 10 символов переменной PATH.

%PATH:~0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних.

Наконец, добавлена поддержка связывания времени выполнения для переменных среды
окружения.
По умолчанию эта поддержка отключена. Ключ /V командной строки
CMD.EXE позволяет включать и выключать ее. Для вызова справки, наберите CMD /?

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

set VAR=before
if "%VAR% " == "before" (
set VAR=after
if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения
)

Данное сообщение не будет выводиться, т.к. %VAR% в ОБОИХ выражениях IF
подставляется в момент первого использования в первом IF, в том числе и в тело
первого ветвления IF, которое является составным выражением. В IF внутри
составного выражения в действительности сравниваются значения "before" и
"after", что заведомо ложно. Следующий пример демонстрирует подобную ошибку:

set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%

в данном случае список файлов текущей папки никогда не будет построен. Вместо
этого, значением переменной LIST будет имя последнего найденного файла.
И вновь, это случилось потому, что %LIST% подставляется всего один раз -
в момент обработки выражения FOR, когда список еще пуст.
Фактически, приведенный фрагмент эквивалентен следующему примеру:

for %i in (*) do set LIST=%i

в котором имя последнего найденного файла сохраняется в переменной LIST.

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

set VAR=before
if "%VAR% " == "before" (
set VAR=after
if "!VAR! " == "after" @echo Тело внутреннего оператора сравнения
)

set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%

При включенной расширенной обработке команд доступны несколько переменных
среды, которые не отображаются в списке, отображаемом при вызове команды SET.
Значения этих переменных вычисляются динамически каждый раз при их извлечении.
Если пользователь явно задает переменные с одним из этих имен,
то это определение перекрывает соответствующее динамическое определение,
описанное ниже:

%CD% - раскрывается в строку текущей директории.

%DATE% - раскрывается в текущую дату, используя тот же формат команды DATE.

%TIME% - раскрывается в текущую дату, используя формат команды TIME.

%RANDOM% - раскрывается в случайное десятичное число между 0 и 32767.

%ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL

%CMDEXTVERSION% - раскрывается в текущее значение версии расширенной обработки команд.

%CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала
командный процессор.

Переменные среды, выставленные в моей Windows XP, которая уже 2 года живет без переустановки:

%ALLUSERSPROFILE% = C:\Documents and Settings\All Users
%CommonProgramFiles% = C:\Program Files\Common Files
%COMPUTERNAME% = "Имя компьютера"
%ComSpec% = C:\WINDOWS\system32\cmd.exe
%CYGWIN% = tty
%FP_NO_HOST_CHECK% = NO
%NUMBER_OF_PROCESSORS% = 2
%OS% = Windows_NT
%Path% = C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOW S\System32\Wbem
%PATHEXT% = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.W SF;.WSH
%PROCESSOR_ARCHITECTURE% = x86
%PROCESSOR_IDENTIFIER% = x86 Family 6 Model 15 Stepping 2, GenuineIntel
%PROCESSOR_LEVEL% = 6
%PROCESSOR_REVISION% = 0f02
%ProgramFiles% = C:\Program Files
%PROMPT% = $P$G
%SystemDrive% = C:
%SystemRoot% = C:\WINDOWS
%TEMP% = C:\DOCUME~1\"Имя пользователя"\LOCALS~1\Temp
%TMP% = C:\DOCUME~1\"Имя пользователя"\LOCALS~1\Temp
%USERDOMAIN% = "Имя компьютера"
%USERNAME% = "Имя пользователя"
%USERPROFILE% = C:\Documents and Settings\"Имя пользователя"
%windir% = C:\WINDOWS

В Windows XP командный интерпретатор cmd.exe при простом запуске, без указания параметров командной строки, отображает версию операционной системы, информацию о защите авторских прав разработчиков ОС и, собственно, саму командную строку, в которой можно ввести как параметр командной строки самой программы cmd.exe, так и любую внешнюю команду, например, команду на запуск другого приложения или стандартную команду, типа mkdir, del и т. п. В случае указания параметров командной строки вы, естественно, получаете некоторые дополнительные возможности. Синтаксис в данном случае таков:

CMD [ команда]

Здесь команда, собственно, и задает исполняемую команду или программу. Можно использовать одновременно и несколько команд, используя между ними специальный разделитель — символы &&, при этом все сочетание нескольких команд должно быть заключено в кавычки, например, "команда&&команда&&команда".

Теперь почти в соответствии с официальной документацией Microsoft (я взял на себя смелость ее подредактировать, сделав немного более понятной для народа, если это в данном случае вообще возможно) попробую расшифровать значение каждого параметра:

/?

Вызов справки (очень подробная, на основе ее, собственно, и написана эта статья).

/A

Вывод результатов выполнения заданной команды в формате ANSI.

/C

Выполнение заданной команды с последующим завершением (то есть закроется окно консоли).

/D

Отключение выполнения команд AutoRun (которые первыми автоматически выполняются при вызове cmd.exe), заданных в специальных разделах реестра (в этом разделе задаются параметры, типа REG_SZ) и (в этом разделе задаются параметры, типа REG_EXPAND_SZ).

/E:ON (/E:OFF)

Разрешение (запрет) расширений команд. В Windows XP по умолчанию включена расширенная обработка всех команд cmd.exe, этот параметр служит для включения / выключения расширений конкретного процесса.

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

Параметр "EnableExtensions"=dword:00000001 в этих разделах включает расширения, а "EnableExtensions"=dword:00000000 — отключает, при этом параметры пользователя имеют приоритет над параметрами компьютера, значение параметра /E командного процессора имеет приоритет над параметрами реестра.

При расширенной обработке команд изменения и / или добавления затрагивают следующие команды: assoc, call, chdir (cd), color, del (erase), endlocal, for, ftype, goto, if, mkdir (md), popd, prompt, pushd, set, setlocal, shift, start (изменен также вызов внешних команд); /F:ON (/F:OFF) — разрешение (запрет) завершения имен файлов и папок (по умолчанию выключено) конкретного вызова cmd.exe. Довольно удобная функция, позволяющая не вводить полностью вручную в окне консоли пути к файлам или имена самих папок, а ввести только часть длинного пути и с помощью нажатия специальной комбинации клавиш дать операционной системе найти подходящие варианты и просто выбрать нужный.

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

"CompletionChar"=dword:00000040
"PathCompletionChar"=dword:00000040

таким образом, чтобы их шестнадцатеричные значения соответствовали коду управляющего символа, используемого для конкретной функции (например, 0 x 4 для Ctrl+D или 0 x 6 для Ctrl+F). Это позволяет сделать известная утилита, неоднократно упоминавшаяся и описанная в нашем журнале, TweakUI.

Параметры пользователя имеют приоритет над параметрами компьютера, значение параметра /F командного процессора имеет приоритет над параметрами реестра.

Microsoft вносит некоторые разъяснения по поводу использования этой функции: "Если завершение включено с помощью ключа командной строки /F:ON, то используются два управляющих символа: Ctrl+D для имен папок и Ctrl+F для имен файлов. Чтобы отключить конкретный символ завершения в системном реестре, в качестве кода специального символа используется шестнадцатеричное значение символа пробела (0 x 20). Завершение вызывается при вводе одного из этих двух специальных символов.

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

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

Если символ завершения используется в одной из встроенных команд манипулирования папками (CD, MD или RD), то всегда подразумевается символ завершения папок.

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

Специальные символы, которые требуют обязательного заключения в кавычки:

<пробел> & () { } ^ = ; ! ’ + , ` ~ "

Все понятно?

/K

Выполнение заданной команды без последующего завершения (здесь окно консоли не закроется).

/Q

Отключение вывода команд на экран (ECHO OFF).

/R

Аналогичен параметру /C.

/S

Изменение поведения команды после /C или /K.

/T:цвет

Задание цвета текста и фона окна консоли.

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

"DefaultColor"=dword:00000000

Соответствия этих чисел цветам приведены в таблице.

То есть результатом выполнения вот этой команды "CMD /T:7С" будут светло-красные буквы на белом фоне.

/U

Вывод результатов выполнения команды в формате Unicode.

/V:ON (/V:OFF)

Разрешение (запрет) отложенного расширения переменных среды (для конкретного вызова cmd.exe) с применением восклицательного знака "!" в качестве разделителя. Например, /V:ON разрешает использовать!var! в качестве расширения переменной var во время выполнения. Синтаксис var служит для расширения переменных при вводе, что приводит совсем к другим результатам внутри цикла FOR.

Также отложенное расширение переменных среды можно включить или выключить в реестре, в разделах (для локальной машины), (для текущего пользователя), установив параметр "DelayedExpansion"=dword:00000001 для разрешения и "DelayedExpansion"=dword:00000000 для запрета.

Параметры пользователя имеют приоритет над параметрами компьютера, значение параметра /V командного процессора имеет приоритет над параметрами реестра.

При включенном отложенном расширении переменных среды символ "!" (символ — восклицательный знак) может использоваться для замены текущего значения переменной среды во время выполнения.

/X

Означает то же, что и ключ /E:ON, из соображений совместимости.

/Y

То же, что и /E:OFF.

И в завершение еще несколько ценных замечаний.

Если указаны ключи /C или /K, то остальная часть командной строки после такого ключа обрабатывается как командная строка, а обработка символов кавычек (") ведется таким образом. Символы кавычек в командной строке сохраняются, если выполняются все перечисленные ниже условия:

  • ключ /S отсутствует;
  • присутствует ровно два символа кавычек;
  • между ними нет других специальных символов, как то: & < > () @ ^ |;
  • между ними имеется один или несколько пробелов;
  • строка, заключенная в кавычки, является именем исполняемого файла.

В противном случае проверяется первый символ, и если он является символом кавычек, то он удаляется, также удаляется последний символ кавычек в командной строке, а весь текст после этого последнего символа кавычек сохраняется.

Вывод, задание и удаление переменных среды cmd.exe.

SET [переменная=[строка]]

переменная Имя переменной среды.

строка Строка символов, присваиваемая указанной переменной.

Введите SET без параметров для вывода текущих переменных среды.

Изменение команды SET при включении расширенной обработки команд:

Если при вызове указать только имя переменной без знака равенства и значения,

команда SET выведет значения всех переменных, имя которых начинается

с указанной строки. Например:

Эта команда выведет значения всех переменных, имена которых начинаются с "P".

Если имя переменной не найдено в текущей среде, при возврате команда SET

установит значение ошибки ERRORLEVEL 1.

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

переменной среды.

Команда SET поддерживает два дополнительных ключа:

SET /A выражение

SET /P variable=

Ключ /A указывает, что строка справа от знака равенства является числовым

выражением, значение которого вычисляется. Обработчик выражений очень

прост и поддерживает следующие операции, перечисленные в порядке убывания

приоритета:

() - группировка

! ~ - - унарные операторы

* / % - арифметические операторы

Арифметические операторы

<< >> - двоичный сдвиг

& - двоичное И

^ - двоичное исключающее ИЛИ

| - двоичное ИЛИ

= *= /= %= += -= - присвоение

&= ^= |= <<= >>=

Разделитель операторов

При использовании любых логических или двоичных операторов необходимо

заключить строку выражения в кавычки. Любые нечисловые строки в выражении

рассматриваются как имена переменных среды, значения которых преобразуются

в числовой вид перед использованием. Если переменная с указанным именем

не определена в системе, вместо нее подставляется нулевое значение. Это

позволяет выполнять арифметические операции со значениями переменных среды,

причем не нужно вводить знаки % для получения значений. Если команда

SET /A вызывается из командной строки, а не из пакетного файла, она выводит

окончательное значение выражения. Слева от любого оператора присваивания

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

десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел,

и 0 для восьмеричных чисел. Например, числа 0x12,

и 022 обозначают десятичное число 18. Обратите внимание на запись

восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в

восьмеричной системе исчисления цифры 8 и 9 не используются.

Ключ /P позволяет установить значение переменной для входной строки, введенной

пользователем. Показывает указанное приглашение promptString перед чтением

введенной строки. Приглашение promptString может быть пустым.

Подстановка переменной среды может быть расширена следующим образом:

%PATH:str1=str2%

расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в

расширенном результате на "str2". "str2" может быть пустой строкой для

эффективного удаления вхождений "str1" из расширенного вывода. "str1" может

начинаться со звездочки, и в этом случае это будет соответствовать любому

началу расширенного вывода до первого вхождения оставшейся части "str1".

Можно также использовать строки расширения.

расширит действие переменной среды PATH, затем использует только 5

символов, которые начинаются с 11-го символа (пропустив 10) расширенного

результата. Если длина не указана, по умолчанию используется оставшееся

значение переменной. Если оба значения (длина и число пропускаемых символов)

отрицательны, следующим используемым значением будет длина значения переменной

среды, добавленной к указанному значению пропуска или указанной длины.

извлечет последние 10 символов переменной PATH.

извлечет все символы переменной PATH, за исключением 2-х последних.

Наконец, добавлена поддержка связывания времени выполнения для переменных среды

окружения. По умолчанию эта поддержка отключена. Ключ /V командной строки

CMD.EXE позволяет включать и выключать ее. Для вызова справки, наберите CMD /?

Связывание времени выполнения для переменных среды окружения полезно при обходе

ограничений раннего связывания, которое происходит при первом чтении текстовой

строки, а не при ее выполнении. Следующий пример демонстрирует возникающую

проблему при использовании раннего связывания переменных:

set VAR=before

If "%VAR%" == "before" (

if "%VAR%" == "after" @echo Тело внутреннего оператора сравнения

Данное сообщение не будет выводиться, т.к. %VAR% в ОБОИХ выражениях IF

подставляется в момент первого использования в первом IF, в том числе и в тело

первого ветвления IF, которое является составным выражением. В IF внутри

составного выражения в действительности сравниваются значения "before" и

"after", что заведомо ложно. Следующий пример демонстрирует подобную ошибку:

set LIST=

For %i in (*) do set LIST=%LIST% %i

в данном случае список файлов текущей папки никогда не будет построен. Вместо

этого, значением переменной LIST будет имя последнего найденного файла.

И вновь, это случилось потому, что %LIST% подставляется всего один раз -

в момент обработки выражения FOR, когда список еще пуст.

Фактически, приведенный фрагмент эквивалентен следующему примеру:

for %i in (*) do set LIST= %i

в котором имя последнего найденного файла сохраняется в переменной LIST.

Связывание времени выполнения для переменных среды окружения происходит при

использовании специального символа (восклицательного знака), обозначающего

проведение сопоставления во время выполнения. Если включена поддержка связывания

времени выполнения, то для достижения ожидаемых результатов приведенные выше

фрагменты должны быть изменены следующим образом:

set VAR=before

If "%VAR%" == "before" (

Set VAR=after

If "!VAR!" == "after" @echo Тело внутреннего оператора сравнения

Set LIST=

For %i in (*) do set LIST=!LIST! %i

При включенной расширенной обработке команд доступны несколько переменных

среды, которые не отображаются в списке, отображаемом при вызове команды SET.

Значения этих переменных вычисляются динамически каждый раз при их извлечении.

Если пользователь явно задает переменные с одним из этих имен,

то это определение перекрывает соответствующее динамическое определение,

описанное ниже:

%CD% - раскрывается в строку текущей директории.

%DATE% - раскрывается в текущую дату, используя тот же формат команды DATE.

%TIME% - раскрывается в текущую дату, используя формат команды TIME.

%RANDOM% - раскрывается в случайное десятичное число между 0 и 32767.

%ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL

%CMDEXTVERSION% - раскрывается в текущее значение версии

расширенной обработки команд.

%CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала

командный процессор.







2024 © gtavrl.ru.