отображение и изменение переменных среды окружения Windows
    Команда SET используется для просмотра и изменения переменных среды окружения в командной строке Windows. Переменные окружения — это переменные, принимаемые значения которых характеризуют среду, в которой выполняется текущая программа — пути системных файлов, сведения об аппаратных средствах, каталоги пользователя и т.п. Значения переменных среды формируются в процессе загрузки Windows, регистрации пользователя в системе, при выполнении отдельных процессов или с помощью команды SET. Для просмотра значения, принимаемого конкретной переменной можно воспользоваться командой :
SET переменная
SET PATH — отобразить значение переменной PATH
Для создания новой переменной, или изменения значения существующей, используется команда :
SET переменная=строка
переменная — Имя переменной среды.
строка — Строка символов, присваиваемая указанной переменной.
SET MyName=Vasya — установить значение переменной MyName
SET path=C:\progs;%path% — изменить значение переменной PATH, добавив в начало строки C:\progs
Значение, принимаемое переменной , доступно для обработки в командных файлах, при использовании ее имени, заключенного в знаки процента — % . Например команда выдачи текста на дисплей ECHO в виде:
ECHO date — выведет на экран слово «date», а команда
ECHO %date% выведет на экран значение переменной date, т.е. текущую дату в формате операционной системы.
Команда SET без параметров используется для вывода текущих значений переменных среды.
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TEST7
ComSpec=C:\windows\system32\cmd. exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData \Local\Temp
TMP=C:\Users\Usr\AppData \Local\Temp
USERDOMAIN=test7
USERNAME=Usr
USERPROFILE=C:\Users\Usr
Кроме переменных, отображаемых в списке, при вызове команды SET, существуют и другие, значения которых изменяется динамически:
%CD% — принимает значение текущего каталога.
%DATE% — принимает значение текущей даты.
%TIME% — принимает значение текущего времени.
%RANDOM% — значение случайного числа в диапазоне между 0 и 32767.
%ERRORLEVEL% — текущее значение ERRORLEVEL, специальной переменной, которая используется в качестве признака результата выполнения программы.
%CMDEXTVERSION%
%CMDCMDLINE% — раскрывается в исходную командную строку, которая вызвала командный процессор .
Если при вызове команды SET указать только часть имени, то будет выведен список переменных, имена которых начинаются с указанной строки. Например:
SET U — выведет значения всех переменных, имена которых начинаются с ‘U’.
Команда SET поддерживает два дополнительных ключа:
SET /A выражение
SET /P variable=[promptString]
Ключ /A указывает, что строка справа от знака равенства является числовым выражением, значение которого вычисляется.
|
=
,
— арифметические операторы
— арифметические операторы
— двоичный сдвиг
— двоичное И
— двоичное исключающее ИЛИ
— двоичное ИЛИ
— присвоение
— разделитель операторов
При использовании любых логических или двоичных операторов необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении рассматриваются как имена переменных среды, значения которых преобразуются в числовой вид перед использованием. Если переменная с указанным именем не определена в системе, вместо нее подставляется нулевое значение. Это позволяет выполнять арифметические операции со значениями переменных среды, причем не нужно вводить знаки % для получения значений. Если команда SET /A вызывается из командной строки, а не из пакетного файла, она выводит окончательное значение выражения.
0x — для шестнадцатеричных чисел
0 — для восьмеричных чисел.
Пример использования префиксов:
SET /A REZ=0xA+012
ECHO %REZ%
В данном командном файле значение переменной REZ вычисляется сложением числа 10, представленного в шестнадцатеричном виде ( 0xA ) и числа 10 , представленного в восьмеричном ( 012 ).
Ключ /P позволяет установить значение переменной для входной строки, введенной пользователем. Показывает указанное приглашение promptString перед чтением введенной строки. Приглашение promptString может быть пустым. Данный ключ позволяет организовать диалог с пользователем в командном файле:
@ECHO OFF
SET /P NAME=Введите имя пользователя:
SET /P pass=Введите пароль:
ECHO Имя пользователя — %NAME% , Пароль — %PASS%
В командных файлах довольно часто требуется работать с частью значения, принимаемого переменной, для чего используются подстановочные значения:
переменная:строка1=строка2 — заменяет в принимаемом значении переменной строку1 на строку2
Следующий командный файл использует замену символа «точка» на символ «тире» в значении переменной, соответствующем текущей дате:
@ECHO OFF
ECHO Дата1 = %tm%
SET tm=%DATE:. =-%
ECHO Дата2 = %tm%
Для выделения части значения, принимаемого переменной, используется следующая конструкция:
переменная:~x,y — где x — число пропускаемых символов от начала строки, а y — количество символов, используемых в качестве значения переменной.
Следующий пример использует отображение текущего времени без секунд и долей секунд (только первые 5 символов из стандартного значения переменной TIME):
@ECHO OFF
set tm=%TIME%
SET tm=%TIME:~0,5%
ECHO Время2 = %tm%
Если значение y ( длина ) не указана, то используется оставшееся до конца строки значение переменной. Если значение y отрицательно, то используется часть строки значения переменной от конца. Предыдущий пример можно изменить , указав, что в принимаемом значении времени отбрасываются 6 символов от конца:
@ECHO OFF
set tm=%TIME%
ECHO Время1 = %tm%
SET tm=%TIME:~0,-6%
ECHO Время2 = %tm%
Возможно использование число пропусков не задано, и используется отрицательное число, то принимаемое значение будет частью переменной от конца строки:
%PATH:~-10% — извлечет последние 10 символов переменной PATH
. Нулевое значение можно не указывать, сохраняя формат подстановки:
%PATH:~0,-2% эквивалентно %PATH:~,-2%
При использовании переменных окружения в командных файлах существует определенное ограничение, связанное с тем фактом, что присваиваемое значение остается без изменения при его модификации внутри группы команд, задаваемой скобками, например в командах IF или FOR . Для обхода данного ограничения используется запуск командного процессора с параметром /V:ON и вместо знаков процента, для получения принимаемого переменной значения, используются восклицательные знаки. Кроме того, существует возможность использовать стандартный запуск командного процессора, но с локальным включением данного режима командой :
Setlocal EnableDelayedExpansion
Разница в результатах использования значений переменных довольно наглядно демонстрируется следующим командным файлом:
Setlocal EnableDelayedExpansion
@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)
Статья — Переменные в CMD, команда SET и арифметика | SafeZone
Статья от 22.12.2011
Автор: Ris и Гимаев Наиль
Источник
Переменные. 17)-1)
set /a random10=%random%/3277
Выводит случайное число от 0 до 9.
У меня это число по нелепой псевдослучайности цифру секунды
%CD% — раскрывается в строку текущей директории.
%DATE% — раскрывается в текущую дату, используя тот же формат команды DATE.
%TIME% — раскрывается в текущую дату, используя формат команды TIME.
%ERRORLEVEL% — раскрывается в текущее значение ERRORLEVEL.
Уровень ошибки, 0 — это нет ошибки, 1 — это есть ошибка, а другие это номера ошибки.
Чтобы получить полный список переменных и их значений введите команду SET
Операции со строковыми или численными переменными
Соединение 2-ух строковых переменных
set x=Gaz set y=Prom echo %x%%y% (GazProm)
Вывод определенного(ых) символа(ов) из строки
Символы номеруются начиная с 0!set str=babywka
Вывод 1-ого символа
echo %str:~0,1% (b)
Вывод 3-х символов с конца строки
echo %str:~-3% (wka)
Вывод всей строки кроме 2-ух первых символов
echo %str:~2% (bywka)
Вывод всей строки кроме 2-ух последних символов
echo %str:~0,-2% (babyw)
Вывод 3-х символов начиная с 3
echo %str:~2,3% (byw)
Удаление подстроки из строки
set str=babywka echo %str:ba=% (bywka)
Замена подстроки из строки на другую подстроку
set str=babywka echo %str:bab=xlop% (xlopywka)
Удаление кавычек(«) из строки
set str2="qwerty" echo %str2:"=% (qwert)
В данном случае: если кавычки в начале и конце строки — можно юзать
echo %str2:~1,-1% (qwert)
Существуют 2 способа использовать переменную в переменной, например:
вывод n-ого символаПервый способ с call set
call set x=%%str:~%n%,1%% echo %x%
Второй способ с for и setlocal enabledelayedexpansion
setlocal enabledelayedexpansion for /l %%i in (%n%,1,%n%) do (set x=!str:~%%i,1!) echo %x%
тут неважно что в for писать, главное
set x=!str:~%n%,1!
писать в do
С циклами мы разберемся в следующей статье.
Но, пока уточню: если код второго способа юзать в пакетном файле (BATнике), то вместо %i юзаем %%i.
Операции с числовыми переменными
Увеличивание на единицу
set /a x+=1
Увеличивание в 2 раза
set /a x+=%x%
аналогично
set /a x*=2
Возведение в квадрат
set /a x*=%x%
Возведение в куб
set /a x=%x%*%x%*%x%
Деление
Деление в CMD является целочисленным!(то есть делится до целого числа)
set /a x=15 set /a y=4 set /a xy=%x%/%y% (3)
Сложение
set /a x=5 set /a y=-6 set /a xy=%x%+%y% (5+(-6)=5-6=-1)
Вычитание
set /a x=5 set /a y=-6 set /a xy=%x%-%y% (5-(-6)=5+6=11)
Вычисление остатка от деления
set /a xy=%x% "%" %y%
(при записи в батник, процент «%» нужно удваивать «%%»)
Унарные операторы
Логическое отрицание (Logical NOT)
set /a y="!"%x%
дает результат(%y%)1 (True), если переменная(%x%) равна 0 (False), и 0 (False)(%y%) в любых других случаях
Например set /a x=5 set /a y="!"%x% (0) set /a x=0 set /a y="!"%x% (1)
Побитовая инверсия (Bitwise NOT):
set /a y="~"%x%
дает результат -1-%x%(%y%)
Например
set /a x=5 set /a y="~"%x% (-1-5=-(1+5)= -6) set /a x=-3 set /a y="~"%x% (-1-(-3)=-1+3=3-1= 2)
Унарный минус (устанавливает/сбрасывает знаковый бит)
set /a y="-"%x%
дает результат 0-%x%(%y%)
Например
set /a x=5 set /a y="-"%x% (-5) set /a x=-3 set /a y="-"%x% (3)
Двоичные операторы
set x=3 (в двоичной системе счисления - 0011) set y=5 (в двоичной системе счисления - 0101)
Побитовое И (AND)
Побитовое И — это бинарная операция, действие которой эквивалентно применению логического И к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов.
Другими словами, если оба соответствующих бита операндов равны 1, результирующий двоичный разряд равен 1; если же хотя бы один бит из пары равен 0, результирующий двоичный разряд равен 0.
set /a xy=%x%"&"%y% (1, в двоичной системе счисления - 0001)
Побитовое ИЛИ (OR)
Побитовое ИЛИ — это бинарная операция, действие которой эквивалентно применению логического ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов.
Другими словами, если оба соответствующих бита операндов равны 0, двоичный разряд результата равен 0; если же хотя бы один бит из пары равен 1, двоичный разряд результата равен 1.
set /a xy=%x%"|"%y% (7, в двоичной системе счисления - 0111)
Побитовое исключающее ИЛИ (XOR)
Побитовое исключающее ИЛИ (или побитовое сложение по модулю два) — это бинарная операция, действие которой эквивалентно применению логического исключающего ИЛИ к каждой паре битов, которые стоят на
одинаковых позициях в двоичных представлениях операндов. «%y% (6, в двоичной системе счисления — 0110)
К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига.
Различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).
При логическом сдвиге значение последнего бита по направлению сдвига теряется (копируясь в бит переноса), а первый приобретает нулевое значение.
Двоичный арифметический сдвиг
Арифметический сдвиг аналогичен логическому, но значение слова считается знаковым числом, представленным в дополнительном коде.
Так, при правом сдвиге старший бит сохраняет свое значение. Левый арифметический сдвиг идентичен логическому.
Вправо
set /a xy=%x%">>"1 (1, в двоичной системе счисления - 0011->0001) set /a xy2=%y%">>"1 (2, в двоичной системе счисления - 0101->0010) set /a n=13 (в двоичной системе счисления - 1101) set /a xn=%n%">>"2 (3, в двоичной системе счисления - 1101->0011) set /a my=-%y%">>"1 (-3, в двоичной системе счисления - 1011(-5)->1101(-3))
Влево
set /a xy=%x%"<<"1 (6, в двоичной системе счисления - 0011->0110) set /a xy2=%y%"<<"1 (10, в двоичной системе счисления - 0101->1010) set /a xy3=%y%"<<"4 (80, в двоичной системе счисления - 0101->1010000) set /a my=-%y%"<<"1 (-10, в двоичной системе счисления - 1011(-5)->10110(-10))
Максимальный размер отдельной переменной среды составляет 8192 байта. (у меня выходило только 8184, наверное это вместе с названием…)
Максимальный общий размер всех переменных среды, включая имена переменных и знак равенства, составляет 65 536 Кбайт.
И я забыл, про 8-ричную и 16-ричную систему счисления в CMD
Системы счисления
Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18.
Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.
Восьмеричная система счисления
set /a x=022 (Это 22 в восьмеричной системе счисления, и 18 в десятичной)
Можно производить все операции, также как и с десятеричными числами.
Но после задания значения переменной, значение хранится в десятичной системе счисления.
Например, сложение
set /a xy=022+07 (Это 22+7=31 в восьмеричной системе счисления, и 31 в десятичной)
Шестнадцатеричная система счисления
set /a x=0x3A (Это 3A в восьмеричной системе счисления, и 58 в десятичной)
Вычитание
set /a xy=0x3A-0x66 (Это 3A-66=-54 в восьмеричной системе счисления, и -44 в десятичной)
Сохранение в переменной вывода программы
К сожаление, передача вывода программ на вход команды set не работает:
echo 1|set /p AA="" set AA
Поэтому можно воспользоваться временным сохранением в файл:
echo 1> 0. <rar.log.tmp') do @echo %%J >rarfilename.tmp set /p rarfilename="" <rarfilename.tmp del rarfilename.tmp
Узнать имя последнего изменённого файла в папке:
dir /b /a-d /o-d *.* >%temp%\0.tmp set /p lastfile="" <%temp%\0.tmp del %temp%\0.tmp echo "%lastfile%"
Комментарий от Dragokas :
По сути эта команда считывает в переменную первую строку файла:
set /p stroka=<file.txt
Комментарий от m00slim25:
Эти операции, как и все остальные, поддерживают кавычный синтаксис:
set /a "y=!%x%" set /a "y=~%x%" set /a "y=-%x%"
Оператор == используется только для строчного сравнения. Кавычки необходимы если в переменной/операнде имеются пробелы.
Для арифметического сравнения необходимо использовать арифметические операторы:
EQU : Равно (=)
NEQ : Не равно (!=)
LSS : Меньше (<)
LEQ : Меньше или равно (<=)
GTR : Больше (>)
GEQ : Больше или равно (>=)
Использовать операторы, указанные в скобках, не представляется возможным, потому что, например, операторы < и > являются указателями перенаправления ввода-вывода.
Cmd if else примеры — Сборка-Доработка
Формат командной строки:
IF [NOT] ERRORLEVEL число команда
IF [NOT] строка1==строка2 команда
IF [NOT] EXIST имя_файла команда
NOT — Указывает, что Windows должна выполнить эту команду, только если условие является ложным.
ERRORLEVEL число — Условие является истинным, если код возврата последней выполненной программы не меньше указанного числа.
строка1==строка2 — Условие является истинным, если указанные строки совпадают.
EXIST имя_файла — Условие является истинным, если файл с указанным именем существует.
команда — Задает команду, выполняемую при истинности условия. За этой командой может следовать ключевое слово ELSE. В случае, если указанное условие ложно, будет выполнена команда, находящаяся после слова ELSE.
Предложение ELSE должно располагаться в той же строке, что и команда, следующая за ключевым словом IF. Например:
IF EXIST имя_файла. (
del имя_файла.
) ELSE (
echo имя_файла. missing.
)
Следующий пример содержит ОШИБКУ, поскольку команда del должна заканчиваться переходом на новую строку:
IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. Missing
Следующий пример также содержит ОШИБКУ, поскольку команда ELSE должна располагаться в той же строке, что и команда, следующая за IF:
IF EXIST имя_файла. del имя_файла.
ELSE echo имя_файла. missing
Вот правильный пример, где все команды расположены в одной строке:
IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. Missing
Изменение команды IF при включении расширенной обработки команд:
IF [/I] строка1 оператор_сравнения строка2 команда
IF CMDEXTVERSION число команда
IF DEFINED переменная команда
где оператор_сравнения принимает следующие значения:
EQU — равно
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — больше
GEQ — больше или равно,
а ключ /I , если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Сравнения проводятся по общему типу данных, так что если строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа, после чего выполняется сравнение чисел.
Условие CMDEXTVERSION применяется подобно условию ERRORLEVEL, но значение сравнивается с внутренним номером версии текущей реализации расширенной обработки команд. Первая версия имеет номер 1. Номер версии будет увеличиваться на единицу при каждом добавлении существенных возможностей расширенной обработки команд. Если расширенная обработка команд отключена, условие CMDEXTVERSION никогда не бывает истинно.
Условие DEFINED применяется подобно условию EXIST , но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена.
Строка %ERRORLEVEL% будет развернута в строковое представление текущего значения кода ошибки ERRORLEVEL, за исключением ситуации, когда уже имеется переменная среды с именем ERRORLEVEL; в подобном случае подставляется значение этой переменной. Например, с помощью данной строки можно выполнить следующее:
goto answer%ERRORLEVEL%
:answer0
echo Получен код возврата 0
:answer1
echo Получен код возврата 1
Допускается и применение описанных выше операторов числового сравнения:
IF %ERRORLEVEL% LEQ 1 goto okay
Строка %CMDCMDLINE% будет развернута в исходную командную строку, переданную CMD.EXE до любой обработки, за исключением ситуации, когда уже определена переменная среды с именем CMDCMDLINE; в подобном случае подставляется значение этой переменной.
Строка %CMDEXTVERSION% будет развернута в строку, представляющую собой текущее значение CMDEXTVERSION, за исключением ситуации, когда уже имеется переменная среды с именем CMDEXTVERSION; в подобном случае подставляется значение этой переменной.
Создание пустого файла, имя которого задается параметром командной строки.
Если параметр командной строки не задан, то пользователю выдается сообщение об ошибке.
@echo off
REM Проверить наличие имени файла, задаваемого в качестве параметра %1
REM Если параметр %1 пустой – переход на метку error
if «%1» EQU «» goto error
REM Если параметр задан, создаем пустой файл, копированием из устройства nul
copy nul «%1»
exit
:error
ECHO File name required ! Must be — %
n0 filename. ext
:exit
Командный файл, выполняющий опрос командой ping сетевых адресов в заданном диапазоне ( 192.168.1.1 – 192.168.1.254 ). Команда ping формирует значение переменной ERRORLEVEL равное нулю, если верно заданы параметры командной строки. То есть, определить доступность пингуемого IP-адреса методом анализа кода возврата ping не получится, поскольку он будет нулевым, независимо от того, отвечает ли пингуемое устройство, или нет. Поэтому, для решения данной задачи необходимо определить характерный признак, который присутствует в выводимых результатах только в том случае, когда пингуемое устройство доступно. Таким признаком может быть наличие строки символов «TTL» в выводе команды ping. Для определения признака можно использовать команду find в цепочке с командой ping .
Примеры вывода для отвечающего и не отвечающего узлов:
Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64 — если устройство с данным IP-адресом доступно;
Превышен интервал ожидания для запроса. — если устройство не отвечает;
Команда find /I «TTL» возвращает код ERRORLEVEL равный 0 , если строка «TTL» присутствует в результате выполнения ping . Ключ /I имеет смысл использовать, чтобы результат не зависил от того, строчные или заглавные символы составляют строку «ttl».
Результат работы командного файла записывается в текстовый файл iplist.txt
@ECHO OFF
REM Постоянная часть IP-адреса
set IPTMP=192.168.1.
REM Количество пингуемых узлов
set N=254
rem С какого адреса начать — начальное значение » хвоста » IP- адреса X.X.X.IPMIN
set /A IPMIN=1
ECHO %DATE% Опрос пингом %N% адресов начиная с %IPTMP%%IPMIN% >> iplist.txt
rem M0 — метка для организации цикла
:M0
rem Переменная IPFULL — полное значение текущего IP-адреса
set IPFULL=%IPTMP%%IPMIN%
rem Если » хвост «больше N – перейти к завершению работы
IF %IPMIN% GTR %N% GOTO ENDJOB
ping -n 1 %IPFULL% | find /I «TTL»
if %ERRORLEVEL%==0 Echo %IPFULL% >> iplist. txt
rem Сформируем следующий IP-адрес
set /A IPMIN=%IPMIN% + 1
rem Перейдем на выполнение следующего шага
GOTO M0
rem Завершение работы
:endjob
exit
Существуют некоторые особенности реализации командного интерпретатора CMD.EXE , которые необходимо учитывать при обработке значений переменных внутри циклов IF и FOR . Использование значений переменных внутри скобок, требует изменения стандартного режима интерпретации командного процессора. Разработчиками предусмотрена возможность запуска CMD.EXE с параметром /V:ON , что включает разрешение отложенного расширения переменных среды с применением символа восклицательного знака ( ! ) в качестве разделителя. То есть, параметр /V:ON разрешает использовать !var! в качестве значения переменной var во время выполнения внутри циклов команд FOR и IF . Но на практике чаще используется возможность локального включения данного режима внутри командного файла специальной директивой:
После чего, можно обрабатывать принимаемые переменными значения внутри цикла, используя вместо знаков процента восклицательные знаки:
FOR … (
IF !ERRORLEVEL!==0 вместо %ERRORLEVEL%==0
…
)
    В русскоязычной справке команды IF имеется ошибка, которая много лет переходит из версии в версию — вместо оператора EQU — равно , указано EQL — равно
Обработка условий в пакетных программах
Синтаксис
Если расширения командного процессора разрешены, следует использовать следующий синтаксис:
Параметры
not Задает выполнение команды только в случае невыполнения условия. errorlevelчисло Условие выполняется, если предыдущая команда, обработанная интерпретатором команд Cmd.exe, завершилась с кодом, равным или большим числа. команда Команда, которая должна быть обработана в случае выполнения условия. строка1==строка2 Условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1). Явно заданные строки нет необходимости заключать в кавычки. existимя_файла Условие выполняется, если существует файл с именем имя_файла. оп_сравнения Трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения.
Оператор | Описание |
---|---|
EQU | равно |
NEQ | не равно |
LSS | меньше |
LEQ | меньше или равно |
GTR | больше |
GEQ | больше или равно |
/i Сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1==string2 команды if. Эти сравнения являются общими. Если и строка1, и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел. cmdextversion число Условие выполняется, только если номер внутренней версии, связанный с расширениями командного процессора Cmd.exe, равен или больше числа. первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены). defined переменная Условие выполняется, если переменная определена. выражение Команда и все ее параметры для обработке в командной строке при выполнении оператора else. /? Отображение справки в командной строке.
Заметки
- Если условие, заданное в команде if, выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if, пропускается, а управление переходит к команде оператора else, если она задана.
- Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.
- Использование команды definedпеременная
При использовании команды defined переменная добавляются следующие три переменные: %errorlevel%, %cmdcmdline% и %cmdextversion%.
%errorlevel% замещается строковым представлением текущего значения errorlevel, если только уже не существует переменная среды с именем ERRORLEVEL. В этом случае будет использовано ее значение. В следующем примере показано использование значения errorlevel после выполнения пакетной программы:
Операторы сравнения оп_сравнения также можно использовать следующим образом:
%cmdcmdline% замещается исходной командной строкой, переданной Cmd. exe, до ее обработки в Cmd.exe, если только уже не существует переменная среды с именем cmdcmdline. В этом случае будет использовано значение cmdcmdline.
%cmdextversion% замещается строковым представлением текущего значения cmdextversion, если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.
Использование оператора else
Оператор else должен размещаться в той же строке, что и команда if. Пример:
Приведенный ниже пример не будет работать, поскольку команда del должна заканчиваться новой строкой:
Приведенный ниже пример не будет работать, поскольку команда else должна находиться в той же строке, что и команда if:
Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:
Примеры
Если файл Product.dat не удается найти, появится следующее сообщение:
Если в приведенном ниже примере при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение об ошибке:
Если ошибка не возникнет, сообщение об ошибке выведено не будет.
Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).
Conditionally perform a command.
IF will only parse numbers when one of (EQU, NEQ, LSS, LEQ, GTR, GEQ) is used.
The == comparison operator always results in a string comparison.
ERRORLEVEL
There are two different methods of checking an errorlevel, the first syntax ( IF ERRORLEVEL . ) provides compatibility with ancient batch files from the days of Windows 95.
The second method is to use the %ERRORLEVEL% variable providing compatibility with Windows 2000 or newer.
IF ERRORLEVEL n statements should be read as IF Errorlevel >= number
i. e.
IF ERRORLEVEL 0 will return TRUE whether the errorlevel is 0, 1 or 5 or 64
IF ERRORLEVEL 1 will return TRUE whether the errorlevel is 1 or 5 or 64
IF NOT ERRORLEVEL 1 means if ERRORLEVEL is less than 1 (Zero or negative).
This is not very readable or user friendly and does not easily account for negative error numbers.
Using the %ERRORLEVEL% variable is a more logical method of checking Errorlevels:
IF %ERRORLEVEL% NEQ 0 Echo An error was found
IF %ERRORLEVEL% EQU 0 Echo No error found
IF %ERRORLEVEL% EQU 0 (Echo No error found) ELSE (Echo An error was found)
IF %ERRORLEVEL% EQU 0 Echo No error found || Echo An error was found
This allows you to trap errors that can be negative numbers, you can also test for specific errors:
IF %ERRORLEVEL% EQU 64 .
To deliberately raise an ERRORLEVEL in a batch script use the EXIT /B command.
It is possible (though not a good idea) to create a string variable called %ERRORLEVEL% (user variable)
if present such a variable will prevent the real ERRORLEVEL (a system variable) from being used by commands such as ECHO and IF.
Test if a variable is empty
To test for the existence of a command line parameter — use empty brackets like this
IF [%1]==[] ECHO Value Missing
or
IF [%1] EQU [] ECHO Value Missing
When comparing against a variable that may be empty, we include a pair of brackets [ ] so that if the variable does happen to be empty the IF command still has something to compare: IF [] EQU [] will return True.
You can in fact use almost any character for this a ‘
‘ or curly brackets, < >or even the number 4, but square brackets tend to be chosen because they don’t have any special meaning.
When working with filenames/paths you should always surround them with quotes, if %_myvar% contains «C:Some Path» then your comparison becomes IF [«C:Some Path»] EQU []
if %_myvar% could contain empty quotes, «» then your comparison should become IF [%_myvar%] EQU [«»]
if %_myvar% will never contain quotes, then you can use quotes in place of the brackets IF «%_myvar%» EQU «»
However with this pattern if %_myvar% does unexpectedly contain quotes, you will get IF «»C:Some Path»» EQU «» those doubled quotes, while not officially documented as an escape will still mess up the comparison.
Test if a variable is NULL
In the case of a variable that might be NULL — a null variable will remove the variable definition altogether, so testing for a NULL becomes:
IF NOT DEFINED _example ECHO Value Missing
IF DEFINED will return true if the variable contains any value (even if the value is just a space)
To test for the existence of a user variable use SET VariableName , or IF DEFINED VariableName
Test the existence of files and folders
IF EXIST filename Will detect the existence of a file or a folder.
The script empty.cmd will show if the folder is empty or not (this is not case sensitive).
Parenthesis
Parenthesis can be used to split commands across multiple lines. This enables writing more complex IF… ELSE… commands:
When combining an ELSE statement with parentheses, always put the opening parenthesis on the same line as ELSE.
) ELSE ( This is because CMD does a rather primitive one-line-at-a-time parsing of the command.
When using parentheses the CMD shell will expand [read] all the variables at the beginning of the code block and use those values even if the variables value has just been changed. Turning on DelayedExpansion will force the shell to read variables at the start of every line.
Pipes
When piping commands, the expression is evaluated from left to right, so
IF SomeCondition Command1 | Command2 is equivalent to:
(IF SomeCondition Command1 ) | Command2
The pipe is always created and Command2 is always run, regardless whether SomeCondition is TRUE or FALSE
You can use brackets and conditionals around the command with this syntax:
IF SomeCondition (Command1 | Command2)
If the condition is met then Command1 will run, and its output will be piped to Command2.
The IF command will interpret brackets around a condition as just another character to compare (like # or @) for example:
IF (%_var1%==(demo Echo the variable _var1 contains the text demo
Placing an IF command on the right hand side of a pipe is also possible but the CMD shell is buggy in this area and can swallow one of the delimiter characters causing unexpected results.
A simple example that does work:
Echo Y | IF red==blue del *.log
Chaining IF commands (AND).
The only logical operator directly supported by IF is NOT , so to perform an AND requires chaining multiple IF statements:
If either condition is true (OR)
This can be tested using a temporary variable:
Set «_tempvar=»
If SomeCondition Set _tempvar=1
If SomeOtherCondition Set _tempvar=1
if %_tempvar% EQU 1 Command_to_run_if_either_is_true
Delimiters
If the string being compared by an IF command includes delimiters such as [Space] or [Comma], then either the delimiters must be escaped with a caret ^ or the whole string must be «quoted».
This is so that the IF statement will treat the string as a single item and not as several separate strings.
Test Numeric values
IF only parses numbers when one of the compare-op operators ( EQU, NEQ, LSS, LEQ, GTR, GEQ ) is used.
The == comparison operator always results in a string comparison.
This is an important difference because if you compare numbers as strings it can lead to unexpected results: «2» will be greater than «19» and «026» will be less than «10».
Correct numeric comparison:
IF 2 GEQ 15 echo «bigger»
Using parentheses or quotes will force a string comparison:
IF (2) GEQ (15) echo «bigger»
IF «2» GEQ «15» echo «bigger»
This behaviour is exactly opposite to the SET /a command where quotes are required.
Wildcards
Wildcards are not supported by IF, so %COMPUTERNAME%==SS6* will not match SS64
A workaround is to retrieve the substring and compare just those characters:
SET _prefix=%COMPUTERNAME:
0,3%
IF %_prefix%==SS6 GOTO they_matched
If Command Extensions are disabled IF will only support direct comparisons: IF ==, IF EXIST, IF ERRORLEVEL
also the system variable CMDEXTVERSION will be disabled.
IF does not, by itself, set or clear the Errorlevel.
IF is an internal command.
You see things; and you say ‘Why?’ But I dream things that never were; and I say ‘why not?’
George Bernard Shaw
Using parentheses to group and expand expressions.
Conditional execution syntax (AND / OR)
SET — Display or Edit environment variables.
ECHO — Display message on screen.
EXIT — Set a specific ERRORLEVEL.
IFMEMBER — group member (Resource kit).
SC — Is a Service running (Resource kit).
Powershell: if — Conditionally perform a command.
Equivalent bash command (Linux): if — Conditionally perform a command.
Встроенная команда set — bash-hackers.org translate
Синопсисset [--abefhkmnptuvxBCHP] <-o OPTIONNAME> [-][--] <POSPARAMS> Описание
Запущенный без опций АтрибутыАтрибуты показанные ниже включаются так
ПримерыЧасть скрипта, который показывает как включить-выключить вывод отладочной информации в скрипте ( #!/bin/bash ... set -x # on ... set +x # off ... Соображения относительно портируемостиКоманда |
PSM1000 Command Strings
Подключение к системе AMX или Crestron
Соединение: Ethernet (TCP/IP; выберите Client в программе AMX/Crestron)
Порт: 2202
Для связи с блоком AMX или Crestron по сети Ethernet можно использовать следующие сообщения.
Типы сообщений
Система управления отправляет следующие командные сообщения.
SET | Отправляется системой управления устройству Shure для изменения значения параметра. Используется для установки определенного значения для параметра. После того как будет отправлена команда SET, устройство Shure в ответ отправит строку REPORT с текущим результатом настройки. |
GET | Позволяет получить текущее значение параметра. После того как будет отправлена команда GET, устройство Shure в ответ отправит строку REPORT с текущим значением параметра. |
REPORT | Позволяет передать текущее значение параметра. Строка REPORT отправляется устройством Shure системе управления в ответ на команду SET или GET. Строка REPORT также отправляется в случае изменения параметра на устройстве Shure. |
Синтаксис
Все отправляемые и принимаемые сообщения состоят из символов ASCII.
- Каждое сообщение начинается с символа «<» с пробелом.
- Каждое сообщение заканчивается символом «>».
- Каждое сообщение завершается символом возврата каретки и перевода строки (CRLF). В системе управления, возможно, потребуется ввести шестнадцатеричное значение, эквивалентное 0x0D0A. Для получения дополнительной информации о вводе символа возврата каретки см. руководство по эксплуатации системы управления.
- Если сообщение является параметром блока, в строке не нужно указывать номер канала.
Примеры сообщений
Примеры сообщений для параметров канала
- < GET 1 FREQUENCY >
- < REPORT 1 FREQUENCY 578000 >
Примеры сообщений для параметров блока
- < SET DEVICE_NAME Shure >
- < REPORT DEVICE_NAME Shure >
Таблица откликов на команды
КОМАНДА | ОТКЛИК | |
Просмотр имени передатчика | GET DEVICE_NAME | REPORT DEVICE_NAME vvvvvvvv |
Установка имени канала | SET x CHAN NAME vvvvvvvv | REPORT x CHAN_NAME vvvvvvvv |
Получение имени канала | GET x CHAN NAME | REPORT CHAN_NAME vvvvvvvv |
Установка уровня аудиосигнала | SET x AUDIO_IN_LVL vvvv | REPORT x AUDIO_IN_LVL vvvv |
Просмотр уровня аудиосигнала | GET x AUDIO_IN_LVL | REPORT x AUDIO_IN_LVL vvvv |
Установка группы и канала передатчика | SET x GROUP_CHAN gg,cc | REPORT x FREQUENCY vvvvvvvvvvv REPORT x GROUP_CHAN gg,ccvvv |
Просмотр группы и канала передатчика | GET x GROUP_CHAN | REPORT x GROUP_CHAN gg,cc |
Установка частоты передатчика | SET x FREQUENCY vvvvvvvvvvv | REPORT x FREQUENCY vvvvvvvvvvv REPORT x GROUP_CHAN —,—vvv |
Просмотр частоты передатчика | GET x FREQUENCY | REPORT x FREQUENCY vvvvvvvvvvv |
Установка уровня передачи ВЧ-сигнала | SET x RF_TX_LVL vvvvvv | REPORT x RF_TX_LVL vvvvvv |
Просмотр уровня передачи ВЧ-сигнала | GET x RF_TX_LVL | REPORT x RF_TX_LVL vvvvvv |
Установка состояния вывода ВЧ-сигнала | SET x RF_MUTE vvvv 1 = выключение, 0 = включение | REPORT x RF_MUTE vvvv 1 = выключение, 0 = включение |
Просмотр состояния вывода ВЧ-сигнала | GET x RF_MUTE 1 = выключение, 0 = включение | REPORT x RF_MUTE vvvv 1 = выключение, 0 = включение |
Установка режима передачи звука | SET x AUDIO_TX_MODE vvvv 1 = моно, 2 = двухточечный, 3 = стерео | REPORT x AUDIO_TX_MODE vvvv 1 = моно, 2 = двухточечный, 3 = стерео |
Просмотр режима передачи звука | GET x AUDIO_TX_MODE | REPORT x AUDIO_TX_MODE vvvv 1 = моно, 2 = двухточечный, 3 = стерео |
Установка уровня аудиосигнала линейного входа | SET x AUDIO_IN_LINE_LVL vvvv 0 = выкл. (дополнительных вход), 1 = вкл. (линейный вход) | REPORT x AUDIO_IN_LINE_LVL vvvv 0 = выкл. (дополнительных вход), 1 = вкл. (линейный вход) |
Просмотр уровня аудиосигнала линейного входа | GET x AUDIO_IN_LINE_LVL | REPORT x AUDIO_IN_LINE_LVL vvvv 0 = выкл. (дополнительных вход), 1 = вкл. (линейный вход) |
Установка частоты измерений | SET x METER_RATE vvvvvvvvvvv 0 = выкл., значение в миллисекундах | REPORT x METER_RATE vvvvvvvvvvv 0 = выкл., значение в миллисекундах |
Просмотр частоты измерений | GET x METER_RATE | REPORT x METER_RATE vvvvvvvvvvv 0 = выкл., значение в миллисекундах |
Уровень измерителя аудиосигнала | REPORT x AUDIO_IN_LVL_L vvvvvvvvvvv | REPORT x AUDIO_IN_LVL_L vvvvvvvvvvv REPORT x AUDIO_IN_LVL_R vvvvvvvvvvv |
Batch script для начинающих / Хабр
Дисклеймер
Мне 12 и я сам в этой теме плохо шарю, т. к. инфы в инете мало. Пж, без хейта.
Что такое батники и с чем их едят
Пакетный файл или в простонародье батник — это файл, который запускает командную сроку или сокращенно cmd, которая построчно интерпретирует команды, записанные в нем. Подробнее смотрите на https://ru.wikipedia.org/wiki/Пакетный_файл.
Первая программа и основные команды
Чтобы сделать батник, нужно сначала создать текстовый файл с именем test и изменить расширение c .txt на .bat. О том, как можно это сделать, читайте здесь: https://remontka.pro/file-extensions. У вас должен появиться файл с такой иконкой:
test.batНажимаем на него ПРАВОЙ кнопкой мыши. Должно появиться диалоговое окно. Нажмем «Открыть». Должен открыться блокнот, пишем:
@echo off echo Hello world! pause
В 1-ой сроке («@echo off») префикс ‘@ ‘ означает, что команда не будет выведена на экран(попробуйте его убрать 🙂 ), сама же команда (echo) выводит текст следующий за ней(см. строку 2), НО, если подать строку «off», все последующие команды будут действовать так, как будто перед ними стоит префикс ‘@’, «echo on», соответственно, выключает этот режим. Чтобы вывести символ «%», его нужно дублировать, потом поймете почему :-), для вывода пустой строки поставьте «.» после «echo»
В 3-ей строке команда выводит строку «press any key to continue . . .» (если у вас русский язык — «Для продолжения нажмите любую клавишу . . .») и останавливает программу до нажатия любой клавиши.
Наводим красоту
Команда «rem»
не эта 🙂не делает ничего и служит комментарием к коду
rem Это самая лучшая прога в мире!!!!!
Код включает русские символы и другие из ascii(например: «╬▓☼», можно скопировать с http://pascalguru.ru/psevdograf.html), иначе ascii символы превратятся в кракозябры:
chcp 65001
Следующий код код работает, как команда «pause», но ничего не выводит на экран и не реагирует на нажатие клавиш(я потом объясню, как это работает).
:m goto m
А этот — меняет заголовок окна на «name»
Заголовок окнаtitle name
Эта команда меняет цвет фона и текста, вместо a и b можно поставить любые шестнадцатеричные цифры(команда не сработает если a = b) см. таблицу ниже. Запись c одной буквой «а» аналогично записи «0a»
color abТаблица
Эта — досрочно завершает программу
exit
Переменные
Создать переменную можно с помощью команды set, синтаксис объявления следующий: P.S. это не совсем переменные, это скорее макросы (для тех к кто не знает C/C++ это именованный кусочек кода, имя которого заменяется на этот кусочек кода)
set a=Hello world
Если после «set» добавить флаг «/a» то:
Переменной задастся значение выражения, а не его текст, например:
set a=2+2 > 2+2 set /a a=2+2 > 4
Переменной можно присвоить ТОЛЬКО числовое значение
Чтобы обратиться к переменной, нужно окружить ее символами «%» (так %name%), пример кода:
set /a a=%b%+%b% echo %a%
Подробнее о переменных
Если добавить флаг «/p», то выводиться значение после символа «=», а переменной задается введенное значение(запустите этот код:)
@echo off set /p a=Enter str echo %a% pause
следующий код вырезает строку от символа номер «a» до символа номер «b» НЕ включительно(счет идет с нуля, отрицательные числа — счет с конца от единицы). Если аргумент один, то он присваивается числу «b», а «a» = 0
%str:~a,b%
следующий заменяет подстроки «a» в строке на строки «b»:
%str:a=b%
Циклы и условия
Цикл можно создать с помощью команды «for», синтаксис следующий:
for %%i in (a b c) do ( cmd )
или такой
for %%i in (a b c) do cmd
(a b c) это список (не обязательно из 3-х элементов) и переменная %%i (нужно ставить символ после процентов, а не между) по очереди проходит по значениям в списке
Если добавить флаг «/l», то переменная в первый раз будет равна «a». К ней каждый раз будет прибавляться «b», пока она не станет больше «c»(тут размер ДОЛЖЕН равняться 3)
запустите этот код, тут все наглядно
@echo off chcp 65001 echo Начало for /l %%i in (1 1 10) do echo %%i echo Конец pause
Команда if выполняет код, если условие верно (или если поставить not после if, когда НЕ верно), вот операторы сравнения:
P. S. строки нужно брать в кавычки «%str%»==»Hello»
equ(==) | = |
neq | ≠ |
lss | < |
leq | ≤ |
gtr | > |
geq | ≥ |
пример кода:
@echo off set /p a=Enter number if a gtr 0 echo positive else\ if a equ 0 echo 0 else echo negative pause
в 3-ей строке, если «a» > 0 выводиться «положительный»(на английском 🙂 ), если равен — 0,в 4-ой если меньше — «отрицательный»
символ «\» означает, что команда продолжается на следующей строке
Метки
Создадите файл start.bat в той же папке, где и test.bat, напишите в нем:
test.bat 2 2
Мы запустили батник, НО подали в него аргументы 2 и 2. Чтобы к ним обратиться, нужно написать %n, где «n» — номер аргумента, считая от одного(не от нуля), вот код, считающий сумму первого и второго аргумента (их может быть от нуля до 9-и):
@echo off set /a res=%1+%2 echo res pause
Метка — это именованное место в коде, она создается с помощью команды «:name»
А этот переходит на метку :m и продолжает выполнение, начиная с нее
rem куча кода :m rem куча кода goto m rem куча кода
И в завершение статьи, хочу сказать о команде call. Она превращает в последующей команде «%%» в «%», а переменные — на их значения. Пример использования:
call echo %%str:~%a%,%b%%%
Set — Переменная среды — Windows CMD
Set — Переменная среды — Windows CMD — SS64.com- SS64
- CMD
- Практическое руководство
Показать, установить или удалить переменные среды CMD. Изменения, сделанные с помощью SET, останутся только на время действия текущего CMD-сеанс.
Синтаксис НАБОР переменная SET переменная = строка КОМПЛЕКТ " переменная = строка " НАБОР " переменная =" SET /A "переменная = выражение " SET /P переменная = [ promptString ] УСТАНОВЛЕН " Ключ переменная : новое или существующее имя переменной среды, например. _num string : Текстовая строка для присвоения переменной. выражение : Арифметическое выражение /A : см. полную информацию об арифметических выражениях ниже.
Имена переменных не чувствительны к регистру, но содержимое может быть.
Рекомендуется избегать использования каких-либо символов-разделителей (пробелов, запятых и т. д.) в имени переменной .
Символы-разделители могут использоваться в значении , если полное присвоение заключено в двойные кавычки, чтобы предотвратить интерпретацию разделителя.
Любые лишние пробелы вокруг имени переменной или строки будут , а не следует игнорировать, SET не прощает лишних пробелов, как многие другие языки сценариев. Поэтому используйте SET alpha=beta, а не SET alpha = beta
.Первый символ имени не должен быть цифрой. Обычной практикой является префикс имен переменных с символом undescore или знаком доллара _variable или $variable. Эти префиксы не требуются, но помогают предотвратить путаницу со стандартными встроенными переменными среды Windows или любыми другими командными строками.
Оболочка CMD не сможет прочитать переменную среды, если она содержит более 8 191 символа.
Показать переменную:
В большинстве случаев окружайте имя переменной символами %, и будет использоваться значение переменной
например Чтобы отобразить значение переменной _department с ЭХО-команда:
ЭХО %_department%Если имя переменной не найдено в текущей среде, SET установит %ERRORLEVEL% в 1 .
Это можно обнаружить с помощью IF ERRORLEVEL …Включение дополнительных символов может быть полезно для отображения любого пробела:
ЭХО [%_department%]
ЭХО «%_department%»Введите SET без параметров, чтобы отобразить все текущие переменные среды.
Введите SET с именем переменной, чтобы отобразить эту переменную
SET _departmentКоманда SET, запущенная со строкой (без знака равенства), отобразит список всех соответствующих переменных с подстановочными знаками
Отображение переменных, начинающихся с «P»:
НАБОР стр.
Показать переменные, начинающиеся с символа подчеркивания
НАБОР _
Установить переменную:
Пример хранения текстовой строки:
C:\> SET _dept=Продажи и маркетинг
C:\> установить _
_dept=Продажи и маркетингУстановить переменную, содержащую символ перенаправления, обратите внимание на положение кавычек, которые не сохраняются:
НАБОР «_dept=Продажи и маркетинг»
Одна переменная может основываться на другой, но это не динамическая
Например.C:\> установить «хх=рыба»
C:\> установить «msg=%xx% чипсов»
C:\> установить сообщение
msg=рыбные чипсыC:\> установить «xx=колбаса»
C:\> установить сообщение
msg=рыбные чипсыC:\> установить «msg=%xx% чипов»
C:\> установить сообщение
msg=колбасные чипсыИзбегайте начинать имена переменных с числа, это позволит избежать неправильной интерпретации переменной как параметра
%123_myvar% < > %1 23_myvarДля отображения недокументированных системных переменных:
КОМПЛЕКТ "
Значения с пробелами — использование двойных кавычек
Хотя это и желательно, добавлять кавычки при присвоении значения, включающего пробелы, не требуется:
SET _variable=один два три
Для специальных символов, таких как &, все выражение следует заключить в кавычки.
Содержимое переменной будет , а не , включая окружающие кавычки:НАБОР » _variable=один и два »
н.б. если вы поместите значение только в кавычки, то эти кавычки будут сохранены:
SET _variable= » one & two »
Имена переменных с пробелами
Переменная может содержать пробелы, а также само имя переменной может содержать пробелы, поэтому следующее присвоение:
НАБОР _var = Мой текст
создаст переменную с именем «_var» — обратите внимание на завершающий пробел
Запрос пользовательского ввода
Переключатель /P позволяет установить переменную, равную строке ввода, введенной пользователем.
Строка подсказки отображается перед чтением пользовательского ввода.@эхо выключено Set /P _dept=Пожалуйста, введите отдел || Установить _dept=NothingChosen
Если "%_dept%"=="NothingChosen" перейти к sub_error
Если /i "%_dept%"=="finance" перейти к sub_finance
Если /i "%_dept%"=="hr" перейти к sub_hr перейти: eof :sub_finance echo Вы выбрали финансовый отдел перейти: eof :sub_hr echo Вы выбрали отдел кадров
goto:eof :sub_error эхо Ничего не выбраноСтрока подсказки может быть пустой. Имя переменной также можно оставить пустым, но это недокументировано.
Если пользователь ничего не вводит (просто нажимает клавишу возврата), то переменная не изменится, а уровень ошибки будет равен 1.
Команда CHOICE является альтернативой SET /P (но CHOICE принимает только один символ/нажатие клавиши).
Эхо строки без завершающих CR/LF
Стандартная команда ECHO всегда добавляет CR/LF в конец каждой отображаемой строки, возвращая курсор в начало следующей строки.
SET /P этого не делает, поэтому его можно использовать для отображения строки. Вставьте символ NUL в SET /P, чтобы он не ждал ввода пользователя:Set /P _scratch=»Это сообщение для пользователя»
Поместить первую строку файла в переменную:
Установить /P _MyVar=
Эхо %_MyVar% Вторая и все последующие строки текста в файле будут удалены.
В самых ранних версиях CMD любой возврат каретки/новые строки (CR+LF) перед первой строкой, содержащей текст, игнорировался.
Удалить переменную
Введите SET только с именем переменной и знаком равенства:
SET _department=
Еще лучше, чтобы убедиться, что после знака = нет пробела в конце, поместите выражение в круглые скобки или кавычки:
(УСТАНОВИТЬ _отдел =)
или
УСТАНОВИТЬ «_department=»
Арифметические выражения (SET /a)
Заключение выражений в «кавычки» необязательно для простой арифметики, но обязательно для любого выражения, использующего логические операторы.
При ссылке на переменную в вашем выражении SET /A позволяет вам опустить %, поэтому _myvar вместо %_myvar%
Любое вычисление SET /A, возвращающее дробный результат, будет округлено в меньшую сторону до ближайшего целого числа.
Оцениваемое выражение может включать следующие операторы:
Для использования оператора Modulus (%) в командной строке или в пакетном сценарии его необходимо удвоить до (%%), как показано ниже. 3″ Сдвиг. (знаковый бит ⇨ 0) Арифметический сдвиг. >> Правый Shift. (Заполняет бит знака таким образом, чтобы отрицательное число всегда оставалось отрицательным.) Ни ShiftRight, ни ShiftLeft не обнаружат переполнения. <<= Набор переменных левого сдвига /a "_num<<=2" >>= Набор переменных правого сдвига /a «_num>>=2» ( ) Набор выражений группы скобок /a «_num=(2+3)*5» , Набор выражений, разделенных запятыми /a «_num=2,_result=_num*5»Если имя переменной указано как часть выражения, но не определено в текущей среде, тогда SET /a будет использовать значение 0.
Операторы арифметического сдвига SET /A не обнаруживают переполнение, которое может вызвать проблемы для любой нетривиальной математики, например. побитовое инвертирование часто неправильно меняет знак +/- результата.
См. примеры SET /a ниже и эту ветку форума для получения дополнительной информации.
также см. SetX, VarSearch и VarSubstring для получения дополнительной информации об управлении переменными.SET /A должен работать во всем диапазоне 32-битных целых чисел со знаком (от -2 147 483 648 до 2 147 483 647), но на практике для отрицательных целых чисел он не будет опускаться ниже -2 147 483 647, потому что правильный результат дополнения до двух 2 147 483 648 вызовет положительное переполнение.
Примеры:
НАБОР/А «_result=2+4»
(=6)НАБОР/A «_result=5»
(=5)
НАБОР /A «_результат += 5″
(=10)НАБОР /A «_result=2 << 3″
(=16) { 2 Lsh 3 = двоичный 10 Lsh 3 = двоичный 10000 = десятичный 16 }SET /A «_result=5 %% 2″
(=1) { 5/2 = 2 + 2 остаток 1 = 1 }SET /A «_var1=_var2=_var3=10»
(устанавливает 3 переменные в одно и то же значение — недокументированный синтаксис.)SET /A будет обрабатывать любую строку символов в выражении как имя переменной среды. Это позволяет вам выполнять арифметические действия с окружающей средой переменные без необходимости вводить какие-либо знаки %, чтобы получить значения. НАБОР/A «_result=5 + _MyVar»
В одной строке можно выполнить несколько расчетов, разделяя каждый расчет запятыми, например:
Установите «_year=1999»
Установить /a «_centre=_year/100, _next=_centre+1»Все числа должны находиться в диапазоне 32-битных целых чисел со знаком (от -2 147 483 648 до 2 147 483 647). Для обработки больших чисел используйте PowerShell или VBScript.
Ведущий ноль будет указывать Octal
Числовые значения являются десятичными числами, если перед ними не стоит цифра 9.0069 0x для шестнадцатеричных чисел,
0 для восьмеричных чисел.Таким образом, 0x10 = 020 = 16 десятичных чисел
Восьмеричная запись может сбивать с толку — все числовые значения, начинающиеся с нуля, рассматриваются как восьмеричные, но 08 и 09 не являются допустимыми восьмеричными цифрами.
Например, SET /a «_month=07» вернет значение 7, а SET /a «_month=09» вернет ошибку.
Постоянные изменения
Изменения, сделанные с помощью команды SET, НЕ являются постоянными, они применяются только к текущему приглашению CMD и остаются только до закрытия окна CMD.
Чтобы навсегда изменить переменную в командной строке, используйте SetX
. или с графическим интерфейсом — Панель управления | Система | Окружающая среда | Системные/пользовательские переменныеПостоянное изменение переменной с помощью SetX не повлияет на уже открытое приглашение CMD.
Только новые подсказки CMD получат новую настройку.Конечно, вы можете использовать SetX в сочетании с SET для одновременного изменения обоих:
Установить _Library=T:\Library\
SetX _Library T:\Library\ /m
Изменить среду для других сеансов
Ни SET, ни SetX не повлияют на другие сеансы CMD, которые уже запущены на машине. Это хорошо, особенно на многопользовательских компьютерах, вашим сценариям не придется бороться с динамически меняющейся средой во время их работы.
Можно добавить постоянные переменные среды в реестр (HKCU\Environment), но это недокументированный (и, вероятно, неподдерживаемый) метод, который не вступит в силу до следующего входа пользователя в систему.
Переменные системной среды можно найти в реестре здесь:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
ВЫЗОВ
Синтаксис CALL SET позволяет оценить переменную подстроку, на странице CALL есть более подробная информация об этом методе, в большинстве случаев лучшим подходом является использование Setlocal EnableDelayedExpansion
Autoexec.bat
Любой оператор SET в c:\autoexec.bat будет анализироваться во время загрузки
Переменные, установленные таким образом, недоступны для 32-битных графических программ — они не будут отображаться в панели управления.
Они появятся в командной строке CMD.Если autoexec.bat ВЫЗЫВАЕТ какие-либо вторичные пакетные файлы, дополнительные пакетные файлы НЕ будут анализироваться при загрузке.
Такое поведение может быть полезно на ПК с двойной загрузкой.
Уровни ошибок
Когда расширения команд CMD включены (по умолчанию):
Уровень ошибки Если переменная была успешно изменена без изменений , обычно это будет 0, но если предыдущая команда установила уровень ошибки, он будет сохранен (это ошибка). SET Переменная не найдена или неверное имя.
SET _var=значение, когда имя _var начинается с «/» и не заключено в кавычки.
SET /P Пустой ответ от пользователя.1 SET /A Несбалансированные скобки 903:50 1073750988 SET /A Отсутствует операнд 1073750989 SET /A Синтаксическая ошибка 1073750990 КОМПЛЕКТ /A Неверный номер 1073750991 SET /A Число больше 32 бит 1073750992 SET /A Деление на ноль 1073750993
SET — это внутренняя команда.
Если расширения команд отключены, все команды SET отключены, кроме простых назначений, таких как: _variable=MyText
# Я зациклился на тебе
# Я зациклился на тебе… — Руди Кларк (Джеймс Рэй/Джордж Харрисон)
Связанные команды:
Синтаксис — VarSubstring Извлечь часть переменной (подстроку).
Синтаксис — VarSearch Поиск и замена части переменной.
Синтаксис — Переменные среды — Список переменных по умолчанию.
CALL — Оценить переменные окружения.
ENDLOCAL — Завершить локализацию изменений среды, используйте для возврата значений.
ВЫХОД — Установить конкретный уровень ошибки.
ПУТЬ — Отображение или установка пути поиска исполняемых файлов.
REG — Чтение или установка значений реестра.
SETLOCAL — Начать локализацию изменений переменных среды.
SETX — установить переменную среды на постоянной основе.
WMIC ENVIRONMENT — установка переменных среды через WMI.
Параметры — получить полный или частичный путь из переменной командной строки.
StackOverflow — Сохранение новой строки в переменной.
Эквивалент PowerShell: Set-Variable — установка переменной и значения (set/sv).
Эквивалент PowerShell: Read-Host — запрос ввода данных пользователем.
Эквивалентная команда bash (Linux): env — отображение, установка или удаление переменных среды.
Copyright © 1999-2022 SS64.com
Некоторые права защищены
Команда набора командной строки MS-DOS и Windows
Обновлено: 13.03.2021 автором Computer Hope
Команда set позволяет пользователям изменить одну переменную или строку на другую.
- Наличие
- Установить синтаксис
- Набор примеров
- Секретные команды
Наличие
Set — это внутренняя команда, доступная в следующих операционных системах Microsoft.
- Все версии MS-DOS
- Windows 95
- Windows 98
- Windows ME
- Windows NT
- Windows 2000
- Windows XP
- Windows 7
- Windows 8
- Windows 10
- Windows 11
Установить синтаксис
- Синтаксис Windows 2000, XP и более поздних версий.
- Синтаксис консоли восстановления Windows 2000 и Windows XP.
- MS-DOS, Windows 95, Windows 98, синтаксис Windows ME.
Windows 2000, XP и более поздние версии синтаксиса
Отображает, задает или удаляет переменные среды cmd.exe.
НАБОР [переменная=[строка]]
переменная | Задает имя переменной среды. |
строка | Задает несколько символов для присвоения переменной. |
Введите SET без параметров для отображения текущих переменных среды.
Если расширения команд включены, SET изменяется следующим образом:
Команда SET, вызванная с именем переменной, без знака равенства или значения отображает значение всех переменных, префикс которых соответствует имени, указанному в команде SET. Например:
КОМПЛЕКТ Р
отобразит все переменные, начинающиеся с буквы «P».
КомандаSET устанавливает для параметра ERRORLEVEL значение 1, если имя переменной не найдено в текущей среде.
Команда SET не позволяет использовать знак равенства в имени переменной.
В команду SET добавлены два новых переключателя:
SET /A выражение
SET /P переменная = [строка подсказки]
Переключатель /A указывает, что строка справа от знака равенства является вычисляемым числовым выражением. Оценщик выражений довольно прост и поддерживает следующие операции в порядке убывания приоритета: 9= |= <<= >>=
Если вы используете какой-либо логический оператор или оператор модуля, вам необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении обрабатываются как имена переменных среды, значения которых преобразуются в числа перед их использованием. Если имя переменной среды указано, но не определено в текущей среде, используется нулевое значение. Это позволяет вам выполнять арифметические действия со значениями переменных среды без необходимости вводить все эти знаки %, чтобы получить их значения. Если SET /A выполняется из командной строки вне командного сценария, то отображается окончательное значение выражения. Для оператора присваивания требуется имя переменной среды слева от оператора присваивания. Числовые значения являются десятичными числами, если перед ними не стоит префикс 0x для шестнадцатеричных чисел и 0 для восьмеричных чисел. Таким образом, 0x12 совпадает с 18 и 022. Примечание: восьмеричная запись может сбивать с толку: 08 и 09.являются недопустимыми числами, поскольку 8 и 9 не являются допустимыми восьмеричными цифрами.
Переключатель /P позволяет установить значение переменной в строке ввода, введенной пользователем. Отображает указанную строку promptString перед чтением строки ввода. PromptString может быть пустым.
Подстановка переменных среды улучшена следующим образом:
%ПУТЬ:стр1=строка2%
расширит переменную среды PATH, заменив каждое вхождение str1 в расширенном результате на стр2 . str2 может быть пустой строкой для эффективного удаления всех вхождений str1 из расширенного вывода. str1 может начинаться со звездочки, которая соответствует всему, начиная с начала расширенного вывода и заканчивая первым вхождением оставшейся части str1.
Может также указывать подстроки для расширения.
%ПУТЬ:~10,5%
будет расширять переменную среды PATH, а затем использовать только 5 символов, которые начинаются с 11-го (смещение 10) символа расширенного результата. Если длина не указана, то по умолчанию используется оставшаяся часть значения переменной. Если какое-либо число (смещение или длина) отрицательное, то используемое число представляет собой длину значения переменной среды, добавленную к указанному смещению или длине.
%ПУТЬ:~-10%
извлечет последние 10 символов переменной PATH.
%ПУТЬ:~0,-2%
извлечет все, кроме двух последних символов переменной PATH.
Наконец, добавлена поддержка отложенного раскрытия переменных среды. Эта поддержка всегда отключена по умолчанию, но ее можно включить/выключить с помощью переключателя командной строки /V в CMD. EXE. См. CMD/?
Отложенное раскрытие переменной среды полезно, чтобы обойти ограничения текущего раскрытия, которое происходит при чтении строки текста, а не при его выполнении. Следующий пример демонстрирует проблему с непосредственным расширением переменной:
установить VAR=до если "%VAR%" == "до" ( установить VAR=после; if "%VAR%" == "after" @echo Если вы видите это, это сработало )
никогда не отобразит сообщение, потому что %VAR% расширяется, когда ложь считывается в память. Изменения, которые происходят с переменной после этого (например, VAR=after в нашем составном операторе if), не раскрываются.
Аналогично, следующий пример не будет работать должным образом:
установить СПИСОК= для %i в (*) установить LIST=%LIST% %i эхо% СПИСОК%
в том, что он НЕ будет создавать список файлов в текущем каталоге, а вместо этого устанавливает переменную LIST в последний найденный файл. Опять же, это связано с тем, что %LIST% расширяется после чтения инструкции FOR, а переменная LIST пуста. Таким образом, фактический цикл FOR, который мы выполняем, имеет вид:
.для %i в (*) установить LIST= %i
, который продолжает устанавливать LIST для последнего найденного файла.
Отложенное расширение переменной среды позволяет использовать другой символ (восклицательный знак) для расширения переменных среды во время выполнения. Если включено раскрытие переменной с задержкой, приведенные выше примеры можно было бы написать следующим образом, чтобы они работали должным образом:
установить VAR=до если "%VAR%" == "до" ( установить VAR=после если "!ВАР!" == "после" @echo Если вы видите это, это сработало ) установить СПИСОК = для %i в (*) установите LIST=!LIST! %я эхо %СПИСОК%
Если расширения команд включены, можно расширить несколько динамических переменных среды, которые не отображаются.
Список переменных, отображаемых SET. Эти значения переменных вычисляются динамически каждый раз, когда значение переменной расширяется. Если пользователь явно определяет переменную с одним из этих имен, то это определение переопределяет динамическое, описанное ниже:
%CD% — расширяется до текущей строки каталога.
%DATE% — расширяется до текущей даты, используя тот же формат, что и команда DATE.
%TIME% — расширяется до текущего времени, используя тот же формат, что и команда TIME.
%RANDOM% — заменяется случайным десятичным числом от 0 до 32767.
%ERRORLEVEL% — расширяется до текущего значения ERRORLEVEL
%CMDEXTVERSION% — заменяется на текущий номер версии расширений командного процессора.
%CMDCMDLINE% — заменяется исходной командной строкой, вызвавшей командный процессор.
%HIGHESTNUMANODENUMBER% — расширяется до максимального номера узла NUMA на этой машине.
Синтаксис консоли восстановления Windows 2000 и Windows XP
установить [переменная_среды]=[Истина/Ложь]
[переменная_среды] | allowwildcards allowallpaths allowremovablemedia nocopyprompt |
[Истина/Ложь] | Установка для переменной enviroment_variable значения true включает переменную enviroment_variable. По умолчанию они установлены на Ложь . |
MS-DOS, Windows 95, Windows 98, синтаксис Windows ME
Отображает, задает или удаляет переменные среды Windows.
НАБОР [переменная=[строка]]
переменная | Задает имя переменной среды. |
строка | Задает несколько символов для присвоения переменной. |
Введите SET без параметров для отображения текущих переменных среды.
Набор примеров
установить путь = c:\windows\команда
Укажите путь к c:\windows\command.
Примечание
Пользователи Microsoft Windows 2000 и Windows XP могут столкнуться с трудностями при определении заданных значений с помощью командной строки MS-DOS. См.: Как установить переменные пути и среды в Windows.
набор
Показать все установленные переменные среды, определенные в настоящее время.
Как использовать команду set вместо команды selection в Windows 2000 и Windows XP
В приведенном ниже примере пользователю будет предложено ввести вариант 1,2 или 3, чтобы напечатать hello , bye или test .
@ECHO off
cls
:start
ECHO.
ECHO 1. Напечатать Hello
ECHO 2. Напечатать Bye
ECHO 3. Напечатать Test
set selection=
set /p selection=Введите число для печати текста.
, если не '%choice%'=='', установить selection=%choice:~0,1%
, если '%choice%'=='1', перейти к hello пока
, если '%choice%'=='3' перейти к тесту
ECHO "%choice%" недействителен, попробуйте еще раз
ECHO.
перейти к началу
:hello
ECHO HELLO
перейти к концу
:пока
ECHO BYE
перейти к концу
:тест
ECHO TEST
перейти к концу
:концу
Секретные команды
Если вы хотите скрыть все свои каталоги от пользователей, вы можете использовать:
УСТАНОВИТЬ DIRCMD=0
Приведенная выше команда не позволяет никому видеть каталоги; однако к ним все еще можно получить доступ. Чтобы снова сделать каталоги видимыми, введите команду ниже.
УСТАНОВИТЬ DIRCMD=
- Как использовать выбор и установку в пакетном файле.
- См. наше определение набора для получения дополнительной информации и связанных ссылок по этому термину.
Команда Linux set и ее использование {9 примеров}
Введение
Команда set
— это встроенная команда оболочки Linux, которая отображает и устанавливает имена и значения переменных оболочки и среды Linux. В Unix-подобных операционных системах набор равен 9.Команда 0787
работает в оболочке Bourne ( sh
), оболочке C ( csh
) и оболочке Korn ( ksh
).
В этом руководстве вы узнаете, что такое команда set
и как ее использовать.
Предпосылки
- Система под управлением Linux.
- Доступ к терминалу/командной строке.
Linux set Синтаксис команды
Общий синтаксис для SET
Команда:
SET [OPTIONS] [Аргументы]
Опции
В контексте SET
, [Подборные
или отключить в среде оболочки Bash. Используйте его, чтобы влиять на поведение определенных сценариев оболочки и помогать выполнять нужные задачи.
- Установите параметр, используя знак минус (
-
), за которым следует соответствующий параметр. - Отмените выбор параметра с помощью знака плюс (
+
), за которым следует соответствующий параметр.
Arguments
[arguments]
are positional parameters and they are assigned in order with the following parameters:
-
$1
-
$2
- . ..
-
$n
При отсутствии указания каких-либо опций или аргументов команда выводит все переменные оболочки.
Выходные значения
Команда set
имеет три выходных значения:
-
0
. Отмечает успешное завершение. -
1
. Сбой, вызванный недопустимым аргументом. -
2
. Сбой, приводящий к сообщению об использовании, обычно из-за отсутствия аргумента.
Параметры команды Linux set
Команда set
предоставляет обширный список параметров, которые можно комбинировать.
Большинство параметров имеют соответствующий флаг -o
, который можно использовать для вызова параметра. В таблице ниже перечислены все параметры и соответствующие им альтернативные формы с использованием синтаксиса -o флаг
.
Options | -o flags | Description |
---|---|---|
-a | -o allexport | Marks all created or modified variables or functions for export. |
-b | -o notify | Предупреждает пользователя о завершении фонового задания. |
-e | -o errexit | Указывает оболочке выйти, если команда завершилась неудачно, т. е. если она выводит ненулевой статус. |
-f | -o ноглоб | Отключает генерацию имени файла (подстановку). |
-h | -o hashall | Находит и сохраняет команды функций, когда функция определена. Параметр -h включен по умолчанию. |
-k | -o ключевое слово | Помещает в среду все аргументы присваивания для команды, а не только те, которые предшествуют имени команды. |
-n | -o noexec | Читает команды, но не выполняет их. |
-m | -o монитор | Отображает сообщение после завершения задачи. |
-p | -o привилегированный | Отключает функции импорта и обработки файла7. 9Опция 0785 -p включена по умолчанию, если реальный и эффективный идентификаторы пользователей не совпадают. Отключение устанавливает эффективные uid и gid на реальные uid и gid. |
-t | -o onecmd | Читает одну команду и затем выходит. |
-u | -o nounset | Обрабатывает неустановленные или неопределенные переменные как ошибку при подстановке (во время расширения параметра). Не применяется к специальным параметрам, таким как подстановочный знак 9.0785 * или @ . |
-v | -o подробный | Выводит строки ввода оболочки при их чтении. |
-x | -o xtrace | Выводит аргументы команды во время выполнения. |
-B | -o braceexpand | Выполняет расширение раскоса оболочки. |
-C | -o noclobber | Предотвращает перезапись существующих обычных файлов путем перенаправления вывода. По умолчанию Bash разрешает перенаправленный вывод для перезаписи существующих файлов. |
-E | -o errtrace | Заставляет функции оболочки наследовать прерывание ERR. |
-H | -o histexpand | Включает замену истории стилей. Параметр включен по умолчанию, когда оболочка интерактивна. |
-P | -o физический | Предотвращает переход по символической ссылке при выполнении команд. |
-T | -o функция | Заставляет функции оболочки наследовать ловушку DEBUG. |
-- | н/д | Присваивает оставшиеся аргументы позиционным параметрам. Если нет оставшихся аргументов, сбрасывает позиционные параметры. |
- | н/д | Присваивает все оставшиеся аргументы позиционным параметрам. Отключает -x и -v вариантов. |
н/д | -o emacs | Использует интерфейс редактирования строк в стиле emacs. |
н/д | -o история | Включает историю команд. |
н/д | -o ignoreeof | Оболочка не завершает работу при чтении конца файла. |
н/д | -o интерактивные-комментарии | Разрешает комментарии в интерактивных командах. |
н/д | -o nolog | Не записывает определения функций в файл истории. |
н/д | -o pipefail | Возвращаемое значение конвейера — это состояние последней команды, которая имела ненулевой статус при выходе. Если при выходе ни одна из команд не имела ненулевой статус, значение равно нулю. |
н/д | -o posix | Заставляет Bash соответствовать стандарту, когда операция по умолчанию отличается от стандарта Posix. |
н/д | -o vi | Использует интерфейс редактирования строки, аналогичный vi . |
Примеры команд Linux set
В этом разделе перечислены примеры наиболее часто используемых команд set
.
Использование команды set без параметров
Запуск команды без параметров или аргументов выводит список всех параметров — имена и значения всех переменных оболочки и функций. Так как список очень длинный, его можно прокручивать с помощью клавиш Page Up и Page Down .
Ниже приведен пример частичного вывода команды set
:
Отладка сценария
Команда set
особенно удобна при отладке сценариев. Используйте -x
с параметром установите команду
, чтобы увидеть, какая команда в вашем сценарии выполняется после результата, что позволяет определить результат каждой команды.
В следующем примере показано, как отлаживать сценарии с помощью set -x
. Выполните следующие действия:
1. Запустите set -x
:
set -x
2. Используйте ваш любимый текстовый редактор (мы используем редактор vi) для создания сценария. Мы создали простой цикл, который позволяет нам видеть -x
эффекты опции:
x=10 в то время как [ $x -gt 0 ]; делать х=$[$х-1] эхо $х спать 2 done
3. Убедитесь, что скрипт выполнен с помощью chmod, чтобы сделать его исполняемым. Этот шаг всегда обязателен перед запуском скрипта . Синтаксис:
chmod +x [имя-сценария.sh]
4. Выполните сценарий. Синтаксис:
./[script-name.sh]
Вывод выводит по одной строке за раз, запускает ее, показывает результат, если он есть, и переходит к следующей строке.
Другой способ включить отладку — поместить флаг -x
в строку shebang скрипта:
#!/bin/bash -x
Экспорт скрипта
вариант -a
. Экспорт переменных или функций позволяет использовать их другим подоболочкам и сценариям.
Включите экспорт сценариев, выполнив следующую команду:
set -a
В следующем примере показано, как работает экспорт сценариев. Выполните следующие шаги:
1. Создайте новый скрипт, используя любой редактор. Например:
один=1 два=2 три=3 четыре=4 /bin/bash
Аргумент /bin/bash
отмечает начало новой оболочки.
2. Проверить, работает ли скрипт в новой оболочке:
echo $one $two $three $four
Вывод доказывает, что созданная нами функция была экспортирована и работает даже при запуске новой оболочки.
Выход при сбое команды
Используйте -e
Параметр, указывающий сценарию завершить работу, если во время выполнения возникает ошибка. Остановка частично функционального сценария помогает предотвратить проблемы или неправильные результаты.
Создайте сценарий со следующим содержимым для проверки этой опции:
#!/bin/bash установить -е кот несуществующий файл эхо "Конец"
В приведенном выше примере сценарий обнаруживает ошибку при попытке отобразить содержимое nonexistingfile
, поскольку этот файл не существует, что приводит к завершению работы в этот момент. Таким образом, окончательные echo
команда не выполнена.
Примечание: Вы можете использовать команду cat для отображения содержимого файла в окне терминала.
Предотвращение потери данных
По умолчанию Bash перезаписывает существующие файлы. Однако при использовании параметра -C
Bash не перезаписывает существующий файл при перенаправлении вывода с использованием >
, >&
или <>
перенаправляется на этот файл.
Например:
Сначала Bash позволяет перезаписать файл listing.txt
. Однако после запуска команды set -C
Bash выводит сообщение о том, что он не может перезаписать существующий файл.
Отчет о несуществующих переменных
По умолчанию в Bash игнорируются несуществующие переменные и работают с существующими. Использование параметра -u
не позволяет Bash игнорировать несуществующие переменные и сообщает о проблеме.
Например, следующий сценарий не содержит команды set -u
, а Bash игнорирует то, что $var2
не определено.
#!/бин/баш переменная1="123" эхо $var1 $var2
Вывод содержит только $var1
.
Однако изменение сценария и добавление команды set -u
не позволяет Bash игнорировать проблему и сообщает о ней:
#!/bin/bash установить -у переменная1="123" эхо $var1 $var2
Установка позиционных параметров
Команда set
также может назначать значения позиционным параметрам. Позиционный параметр — это переменная оболочки, значение которой указывается с использованием следующего синтаксиса:
$[N]
Значение [N]
— это цифра, обозначающая позицию параметра. Например, $1
— первый позиционный параметр, $2
— второй параметр и т. д.
Например:
Установите первую вторую треть
, выполняя команду выше наборов Первая
, чтобы соответствовать $ 1
Параметр $
. третий
до $3
. Проверьте это с помощью команды echo:
echo $2
Отмените позиционные параметры, запустив:
set --
Split Strings
Используйте команду set
для разделения строк на основе пробелов на отдельные переменные. Например, разделите строки в переменной с именем myvar
, которая говорит «Это тест» .
myvar="Это тест" установить -- $myvar эхо $1 эхо $2 эхо $3 эхо $4
Используйте этот параметр для извлечения и фильтрации информации из выходных данных команды, аналогично тому, что делает команда awk.
Установить флаги allexport и уведомления
Флаг -o allexport
позволяет автоматически экспортировать все впоследствии определенные переменные, а флаг -o notify
указывает оболочке немедленно печатать сообщения о завершении задания.
Чтобы установить флаги, выполните:
set -o allexport -o notify
В следующем примере мы видим, что оболочка уведомляет вас о завершении фонового задания после экспорта сценария:
Примечание : если вы хотите запустить процесс в фоновом режиме, добавьте амперсанд ( и
) в конце команды.
Заключение
Теперь вы знаете, что такое команда set
и как ее можно использовать в Linux. Протестируйте различные параметры, чтобы лучше понять команду и максимизировать свой контроль над средой Linux, используемой различными пакетами.
Если вам интересна тема Bash, ознакомьтесь с нашим подробным руководством по функциям Bash: как их использовать.
Переменные среды для приложений Java
Что такое переменные среды?
Переменные среды — это глобальных системных переменных , доступных для всех процессов/пользователей, работающих под управлением операционной системы (ОС), такой как Windows, macOS и Linux. Переменные среды полезны для хранения общесистемных значений, например,
-
PATH
: наиболее часто используемая переменная среды, в которой хранится список каталогов для поиска исполняемых программ. -
ОС
: операционная система. -
COMPUTENAME
,USERNAME
: сохраняет имя компьютера и текущего пользователя. -
SystemRoot
: корневой каталог системы. - (Windows)
HOMEDRIVE
,ДОМАШНИЙ ПУТЬ
: Домашний каталог текущего пользователя.
(Windows) Переменные среды
Переменные среды в Windows НЕ чувствительны к регистру (поскольку устаревшая DOS НЕ учитывает регистр). Обычно они пишутся в верхнем регистре, а слова соединяются символом подчеркивания ( _
), например, JAVA_HOME
.
Отображение переменных среды и их значений
Чтобы просмотреть ВСЕ переменные среды и их значения, запустите CMD и введите команду « set
», как показано ниже,
// Показать все переменные (в парах ИМЯ=ЗНАЧЕНИЕ) набор ИМЯ КОМПЬЮТЕРА=xxxxxxx ОС=хххххх ПУТЬ=xxxxxxx . ......
Попробуйте выполнить команду " set
" в своей системе и изучите перечисленные переменные среды. Обратите особое внимание на переменную с именем ПУТЬ
.
Чтобы отобразить конкретную переменную, используйте команду " set varname
" или " echo % varname %
":
// Показать конкретную переменную установить ИМЯ КОМПЬЮТЕРА ИМЯ КОМПЬЮТЕРА=xxxxxx // или используйте команду "echo" с именем переменной, заключенным в пару "%" эхо %COMPUTERNAME% COMPUTERNAME=xxxxxx
Установить/снять/изменить переменную среды для «текущего» сеанса CMD
Чтобы установить (или изменить) переменную среды, используйте команду « set varname = value
». Перед и после знака '='
не должно быть пробелов. Чтобы сбросить переменную среды, используйте « set varname =
», т. е. установите для нее пустую строку.
набор имя_переменной набор имя_переменной = значение набор имя_переменной = набор | Показать значение переменной Установите или измените значение переменной (Примечание: без пробела до и после '=') Удалите переменную, установив пустую строку (Примечание: ничего после '=') Показать ВСЕ переменные среды |
Например,
// Установить переменную среды с именем MY_VAR установить MY_VAR=привет // Отображать установить MY_VAR MY_VAR=привет // Сбросить переменную окружения установить MY_VAR= // Отображать установить MY_VAR Переменная среды MY_VAR не определена
Переменная среды, установленная с помощью команды « set
» в CMD, является локальной и доступна только для текущего сеанса CMD. Попробуйте установить переменную, перезапустите CMD и найдите переменную.
Использование переменной среды
Для ссылки на переменную в Windows используйте % varname %
(с префиксом и суффиксом '%'
). Например, вы можете использовать команду echo
для вывода значения переменной в виде " echo % varname %
".
// Показать переменную окружения PATH эхо %PATH% ПУТЬ=xxxxxxx // Добавляем каталог перед существующим PATH установить PATH=c:\myBin;%PATH% ПУТЬ=c:\myBin;[ существующих записей ]
Как добавить или изменить переменную среды «навсегда»
Чтобы добавить/изменить переменную среды на постоянной основе в Windows (чтобы она была доступна для ВСЕХ процессов/пользователей Windows и оставалась при загрузке ):
- Запустить «Панель управления»
- "Система"
- «Дополнительные параметры системы»
- Перейти на вкладку «Дополнительно»
- "Переменные среды"
- Выберите «Системные переменные» (для всех пользователей)
- К добавьте новую переменную среды:
- Выберите "Новый"
- Введите переменную «Имя» и «Значение». Вместо того, чтобы вводить «значение» и допускать ошибку опечатки, я предлагаю вам использовать кнопку «Обзор каталога ...» или «Обзор файла ...» для получения нужного каталога или файла.
- Чтобы изменить существующую переменную среды:
- Выберите "Редактировать"
- Введите новое "Значение". Вместо того, чтобы вводить «значение» и допускать ошибку опечатки, я предлагаю вам использовать кнопку «Обзор каталога ...» или «Обзор файла ...» для получения нужного каталога или файла.
Вам необходимо ПЕРЕЗАПУСТИТЬ CMD, чтобы новые настройки вступили в силу!
Чтобы проверить новую настройку, запустите CMD:
установить VAR_NAME VAR_NAME=VAR_VALUE
PATH Переменная среды в Windows
Когда вы запускаете исполняемую программу (с расширением файла « .exe
», « .bat
» или « .com
») из оболочки CMD, Windows ищет исполняемую программу в текущий рабочий каталог , за которым следуют все каталоги, перечисленные в переменной среды PATH
. Если программа не может быть найдена в этих каталогах, вы получите следующую ошибку:
// (Windows 2000/XP/Vista/7/8/10) "cmd.exe" азбука 'abc' не распознается как внутренняя или внешняя команда, работающая программа или командный файл. // (Windows 95/98) "command.com" азбука Неверная команда или имя файла
Чтобы просмотреть текущий ПУТЬ
, введите команду:
ПУТЬ PATH=path2;path2;path4;...
Как добавить каталог в PATH в Windows
Чтобы добавить каталог в существующий PATH
в Windows:
- Запустите «Панель управления»
- "Система"
- «Дополнительные параметры системы»
- Перейти на вкладку «Дополнительно»
- "Переменные среды"
- В разделе «Системные переменные» (для всех пользователей) выберите «Путь»
- "Редактировать"
- (Для более новых версий Windows 10) Появится таблица, показывающая каталоги, включенные в текущую настройку PATH ⇒ «Создать» ⇒ «Обзор . ..», чтобы выбрать нужный каталог для добавления в PATH (не вводите как хотите сделайте опечатку!) ⇒ Несколько раз нажмите «Переместить вверх», чтобы переместить его наверх ⇒ «ОК» (не «Отмена») ⇒ «ОК» ⇒ «ОК».
- (Для старых версий Windows) Если вы не видите всплывающую таблицу, пришло время сменить компьютер.
Вам нужно ПЕРЕЗАПУСТИТЬ CMD, чтобы новая настройка PATH вступила в силу!
Чтобы проверить новую настройку, запустите CMD:
ПУТЬ PATH=путь2;путь3;путь4;...
Примечания:
- Windows выполняет поиск в текущем каталоге (
.
) перед поиском записейPATH
. (Unixes/macOS не выполняет поиск в текущем каталоге, если вы явно не укажете его в PATH.) - Windows использует точку с запятой (
;
) в качестве разделителя пути; в то время как Unix/macOS использует двоеточие (:
). - Если имя вашего каталога содержит специальные символы, такие как пробел (настоятельно не рекомендуется), заключите его в двойные кавычки.
(macOS/Linux) Переменные среды
Переменные среды в macOS/Unix чувствительны к регистру. Глобальные переменные окружения (доступные для ВСЕХ процессов) имеют имена в верхнем регистре, а слова соединяются символом подчеркивания ( _
), например, JAVA_HOME
. Локальные переменные (доступные только текущему процессу) написаны строчными буквами.
Использование переменных среды в оболочке Bash
Большинство Unix-систем (Ubuntu/macOS) используют так называемую оболочку Bash . В оболочке bash
:
- Чтобы получить список всех переменных среды, используйте команду «
env
» (или «printenv
»). Вы также можете использовать "set
", чтобы перечислить все переменные, включая все локальные переменные. - Чтобы сослаться на переменную, используйте
$ varname
с префиксом'$'
(Windows использует% имя_переменной %
). - Чтобы напечатать значение определенной переменной, используйте команду "
echo $ varname
". - Чтобы установить переменную среды, используйте команду «
export varname=value
», которая устанавливает переменную и экспортирует ее в глобальную среду (доступную другим процессам). Заключите значение в двойные кавычки, если оно содержит пробелы. - Чтобы установить локальную переменную, используйте команду "
имя_переменной
= значение
" (или "установить
имя_переменной
= значение"). Локальная переменная доступна только внутри этого процесса. - Чтобы сбросить локальную переменную, используйте команду "
varname
=
", т.е. установите пустую строку (или "unset
varname
").
Как установить переменную среды на постоянной основе в Bash Shell
Вы можете установить переменную среды на постоянной основе, поместив команду export
в сценарий запуска оболочки Bash « ~/. bashrc
» (или «~/.bash_profile
» или « ~/.profile
» ) вашего домашнего каталога; или " /etc/profile
" для общесистемных операций. Обратите внимание, что файлы, начинающиеся с точки ( .
), по умолчанию скрыты. Чтобы отобразить скрытые файлы, используйте команду « ls -a
» или « ls -al
».
Например, чтобы добавить каталог в PATH
, добавьте следующую строку в конце "~/.bashrc
" (или "~/.bash_profile
", или " ~/.profile
"), где ~
обозначает домашний каталог текущего пользователя или " /etc/profile
" для ВСЕХ пользователей.
// Добавляем каталог перед существующим PATH export PATH=/usr/local/mysql/bin:$PATH
(для Java) Вы можете установить переменные среды CLASSPATH
, добавив следующую строку. Например,
export CLASSPATH=.:/usr/local/tomcat/lib/servlet-api.jar
Обратите внимание, что оболочка Bash использует двоеточие ( :
) в качестве разделителя пути; в то время как окна используют точку с запятой ( ;
).
Чтобы обновить оболочку bash, введите команду " source
" (или перезапустите оболочку bash):
// Обновить оболочку bash источник ~/.bashrc // или же источник ~/.bash_profile источник ~/.profile источник /etc/профиль
(Примечания) Для старых версий csh (C-shell) и ksh (Korn-shell)
- Используйте "
printenv
" (или "env
"), чтобы получить список всех переменных среды. - Используйте «
setenv varname value
» и «unsetenv varname
» для установки и отмены установки переменной среды. - Используйте «
set varname = value
» и «unset varname
», чтобы установить и отменить установку локальной переменной для текущего процесса.
Переменная среды PATH
Большинство Unix и macOS используют так называемую оболочку Bash Shell в « Terminal ». Когда вы запускаете исполняемую программу (с разрешением файла исполняемый файл ) в оболочке Bash, система ищет программу во ВСЕХ каталогах, перечисленных в PATH
. Если программа не может быть найдена, вы получите следующую ошибку:
азбука bash: abc: команда не найдена
Обратите внимание, что текущий каталог ( .
) не ищется, если только он не включен в PATH
. Для запуска программы в текущем каталоге необходимо указать текущий путь (./
), например,
./myProgram
Чтобы просмотреть текущий PATH
, введите команду:
эхо $PATH path2:path3:path4:...
Как добавить каталог в PATH в macOS/Linux
Чтобы добавить каталог к существующему PATH
в macOS/Unixes, добавьте следующую строку в конец одного из сценариев запуска, например "~/.bashrc
", " ~/.login
" "~/. bash_profile
", " ~/.profile
" (где ~
обозначает домашний каталог текущего пользователя) или " /etc/profile
" для ВСЕХ пользователей.
// Добавляем каталог перед существующим PATH экспорт PATH=/path/to/dir:$PATH
Чтобы обновить оболочку bash, введите команду « source
» (или перезапустите оболочку bash):
// Обновить оболочку bash источник ~/.bashrc // или же источник ~/.bash_profile источник ~/.profile источник /etc/profile
Чтобы проверить новую настройку, запустите CMD:
эхо $PATH path2:path3:path4:...
Примечания:
Java-приложения и переменные среды PATH, CLASSPATH, JAVA_HOME
Многие проблемы при установке и запуске Java-приложений вызваны некорректной настройкой переменных окружения ( глобальных системных переменных доступных всем процессам/пользователям, работающим под операционной системой), в частности, PATH
, ПУТЬ К КЛАССУ
и JAVA_HOME
.
PATH
Когда вы запускаете программу из командной строки, операционная система использует переменную среды PATH
для поиска программы в локальной файловой системе. Другими словами, PATH
поддерживает список каталогов для поиска исполняемых программ .
ПУТЬ (для Windows)
При запуске исполняемой программы (с расширением файла « .exe
», « .bat
» или « .com
») из оболочки CMD Windows ищет исполняемая программа в текущем рабочем каталоге , за которым следуют все каталоги, перечисленные в переменной среды PATH
. Если программа не может быть найдена в этих каталогах, вы получите следующую ошибку:
// (Windows 2000/XP/Vista/7/8/10) "cmd.exe" азбука 'abc' не распознается как внутренняя или внешняя команда, работающая программа или командный файл. // (Windows 95/98) "command.com" азбука Неверная команда или имя файла
Например, если вы пытаетесь использовать компилятор Java " javac. exe
" для компиляции исходного файла Java, но " javac.exe
" не может быть найден в текущем каталоге и все каталоги в PATH
, вы получите следующую ошибку:
javac Hello.java 'javac' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.
ПУТЬ
поддерживает список каталогов. В Windows каталоги разделяются точкой с запятой (;
).
Для приложений Java PATH
должен включать следующие каталоги:
- Каталог JDK "
bin
" (двоичный) (например, "c:\Program Files\java\jdk1.x.x\bin
"), который содержит программы JDK, такие как компилятор Java "javac.exe
" и среда выполнения Java "java.exe
". - "
c:\windows\system32
" и "c:\windows
", которые содержат консольные программы и команды.
Каталог JDK " bin
" должен быть указан перед " c:\windows\system32
" и " c:\windows
" в PATH
. Это связано с тем, что некоторые старые системы Windows предоставляют в этих каталогах собственную среду выполнения Java (часто устаревшую) (попробуйте выполнить поиск по запросу « java.exe
» на вашем компьютере, вы можете найти несколько записей).
Чтобы добавить каталог (скажем, JDK « bin
») в существующий PATH, проверьте «Как добавить каталог в PATH».
PATH (для macOS/Linux)
Большинство Unix и macOS используют так называемую Bash Shell в « Terminal ». оболочке Bash, система ищет программу во ВСЕХ каталогах, перечисленных в ПУТЬ
. Если программа не может быть найдена, вы получите следующую ошибку:
азбука bash: abc: команда не найдена
Например, если вы пытаетесь использовать компилятор Java " javac
" для компиляции исходного файла Java, но " javac
" не может быть найден в списке каталогов в PATH
, вы получите следующую ошибку:
javac Hello. java bash: javac: команда не найдена
Для поддержки приложений Java необходимо включить каталог JDK " bin
" (двоичный) в PATH. См. «Как добавить каталог в PATH».
CLASSPATH
Архивный файл Java (JAR)
Для простоты распространения классы Java часто архивируются (заархивируются) вместе в так называемый файл JAR. Чтобы использовать сторонний пакет Java, вам необходимо поместить распространяемый файл JAR в место, доступное для компилятора Java и среды выполнения Java.
Как найти классы?
Компилятор Java (" javac
"), Java Runtime (" java
") и другие инструменты Java выполняют поиск классов, используемых в вашей программе, в следующем порядке:
- Классы платформы Java (начальная загрузка): включить системные классы в основные пакеты (
java.*
) и пакеты расширения (javax.*
) в "rt.jar
" (класс среды выполнения), "i18n.jar
" (класс интернационализации),charsets. jar
,jre/classes
и другие. - Каталоги расширений Java: вы можете скопировать внешние файлы JAR в каталог расширений Java (это удалено и не применимо к JDK 10).
- Для Windows каталог расширений Java находится по адресу «
\jre\lib\ext c:\Program Files\Java\jdk1.7.0_{xx}\jre\lib\ доб
"). - Для macOS каталоги расширений JDK: «
/Library/Java/Extensions
» и «/System/Library/Java/Extensions
». - Для Ubuntu каталоги расширений JDK: «
/jre/lib/ext /usr/user/java/jdk1.7.0_{xx}/jre/lib/ext
»). и "/usr/java/packages/lib/ext
".
java.ext.dirs
». Вы можете распечатать его содержимое черезSystem.out.println(System.getProperty("java.ext.dirs"))
. - Для Windows каталог расширений Java находится по адресу «
- Путь поиска пользовательских классов (короче, путь к классу): определяется в следующем порядке:
- По умолчанию используется текущий рабочий каталог (
.
). - Записи в переменной среды
CLASSPATH
, которая переопределяет значение по умолчанию. - Записи в параметре командной строки
-cp
(или-classpath
), который переопределяет переменную средыCLASSPATH
. - Параметр командной строки среды выполнения
-jar
, который переопределяет все вышеперечисленное.
java.class.path
".
Рекомендуется использовать параметр командной строки-cp
(или-classpath
) (настраиваемый для каждого из ваших приложений) вместо установки постоянной средыПУТЬ К КЛАССУ
для всех приложений Java. IDE (например, Eclipse/NetBeans) управляет-cp
(-classpath
) для каждого из приложений и не полагается на средуCLASSPATH
. - По умолчанию используется текущий рабочий каталог (
Не удается найти классы
Если среда выполнения Java (" java
") не может найти классы, используемые в вашей программе, во всех указанных выше местах, она выдает ошибку "Не удалось найти или загрузить основной класс xxxx" (JDK 1. 7) или "java.lang .NoClassDefFoundError" (до JDK 1.7).
Аналогичным образом, компилятор Java (" javac
") будет выдавать такие ошибки компиляции, как "не удается найти символ", "пакет не существует".
Примечания: внешние собственные библиотеки (" .lib
", " .dll
", " .a
", " .so
") должны быть найдены в пути в свойстве JRE " java.library.path
", который обычно, но не обязательно , включает все каталоги в переменной среды PATH
. В противном случае , вы получите ошибку времени выполнения " java.lang.UnsatisfiedLinkError: no xxx in java.library.path
". и JAR-файлы (однофайловый архив class-файлов).Если CLASSPATH
не задан, по умолчанию используется текущий каталог. Если вы установите CLASSPATH
, важно включить текущий рабочий каталог ( .
). В противном случае текущий каталог не будет искаться.
Распространенная проблема при запуске программы hello-world: ПУТЬ К КЛАССУ
задан, но не включает текущий рабочий каталог. Поэтому поиск в текущем каталоге не выполняется, что приводит к ошибке «Ошибка: не удалось найти или загрузить основной класс Hello». Вы можете просто удалить CLASSPATH
и оставьте путь к классу по умолчанию для текущего каталога.
Для новичков не требуется явная настройка CLASSPATH
. Достаточно значения по умолчанию CLASSPATH
текущего каталога. Удалите все настройки CLASSPATH
, если они есть. Однако, если вам нужно установить CLASSPATH
, убедитесь, что вы включили текущий каталог '.'
.
Переменная среды PATH
(для поиска исполняемых программ) применима ко всем приложениям; пока CLASSPATH
используется только Java.
Прочтите документы JDK "Установка CLASSPATH
" и "Как находят классы" (гиперссылки можно найти на главной странице документации JDK или в Google).
CLASSPATH Переменная среды (для Windows)
CLASSPATH
принимает каталоги и JAR-файлы. Записи пути разделяются точкой с запятой ( ;
).
Пример: отображение и изменение CLASSPATH
для текущего сеанса CMD.
// Показать текущую настройку CLASSPATH установить ПУТЬ К КЛАССУ // Установить CLASSPATH в текущий каталог и файл JAR set CLASSPATH=.;d:\tomcat\lib\servlet-api.jar
Вы можете установить CLASSPATH
на постоянной основе. См. «Как установить переменную среды».
CLASSPATH (для macOS/Ubuntu)
- Чтобы установить
CLASSPATH
для текущего сеанса, выполните следующую команду:экспорт CLASSPATH=.:/usr/local/tomcat/bin/servlet-api.jar
Используйте двоеточие «:
» в качестве разделителя пути (вместо точки с запятой «;
» в Windows). - Чтобы установить
CLASSPATH
на постоянной основе, поместите приведенную выше команду экспорта в сценарий инициализации оболочки bash (. bashrc
или.bash_profile
домашнего каталога или/etc/profile
для всех пользователей). См. «Как установить переменную среды».
JAVA_HOME и JRE_HOME
Для многих приложений Java (таких как Tomcat) требуется переменная среды JAVA_HOME
для установки каталога JDK.
Как установить JAVA_HOME в Windows
Сначала проверьте, не установлен ли уже JAVA_HOME
, запустив CMD, и введите:
set JAVA_HOME
Если JAVA_HOME
не установлено, вы получите сообщение «Переменная среды JAVA_HOME не определена». В противном случае будет показана текущая настройка.
Установить/изменить JAVA_HOME
в Windows:
- Запустить «Панель управления»
- "Система"
- «Дополнительные параметры системы»
- Перейти на вкладку «Дополнительно»
- "Переменные среды"
- Выберите «Системные переменные» (для всех пользователей)
- К добавьте новую переменную среды "
JAVA_HOME
":- Выберите "Новый"
- В поле «Имя переменной» введите «JAVA_HOME».
- В «Значение переменной» нажмите «Обзор каталога...» и перейдите к установленному каталогу JDK (например, «
C:\Program Files\Java\jdk-15.0.xx
"). - ОК ⇒ ОК ⇒ ОК.
- Для измените существующую настройку "
JAVA_HOME
":- Выберите "
JAVA_HOME
" ⇒ "Редактировать" - В «Значение переменной» нажмите «Обзор каталога...» и перейдите в каталог с установленным JDK (например, «
C:\Program Files\Java\jdk-15.0.xx
»). - ОК ⇒ ОК ⇒ ОК.
- Выберите "
Вам необходимо ПЕРЕЗАПУСТИТЬ CMD, чтобы новые настройки вступили в силу!
Чтобы проверить новую настройку, перезапустите CMD:
установить JAVA_HOME JAVA_NAME=C:\Program Files\Java\jdk-13.0.1
Как установить JAVA_HOME в Linux/macOS (Bash Shell)
Сначала проверьте, установлен ли уже JAVA_HOME
, запустив терминал, и введите:
echo $JAVA_HOME
JAVA_HOME
должен быть установлен в установленный каталог JDK. Вам нужно найти каталог с установленным JDK.
[TODO] найти установленный каталог macOS и Ubuntu JDK.
Добавьте следующую строку в конце "~/.bashrc
" (или " ~/.login
"). Обратите внимание, что имя файла, начинающееся с точки ( .
), по умолчанию скрыто.
[TODO] Как отобразить скрытие для macOS/Ubuntu.
export JAVA_HOME=/path/to/JDK-installed-directory
Чтобы новые настройки вступили в силу, необходимо обновить оболочку bash. Введите команду « source
» следующим образом:
// Обновить оболочку Bash источник ~/.bashrc // или "источник ~/.login" // Проверяем новую настройку echo $JAVA_HOME
Windows и Unix/macOS
Java не зависит от платформы. Классы Java работают как в Windows, так и в Unix-совместимых двоичных файлах.
- В Unix есть много оболочек, таких как более новая
bash
и более стараяcsh
,ksh
. В Windows есть две оболочки: более новаяcmd.exe
и более старыйcommand.com
. Каждая оболочка поставляется со своим набором команд, утилит и собственным языком программирования сценариев. - Имя переменной Unix обозначается как
$ varname
, например,$CLASSPATH
. Windows использует% varname %
, например,%CLASSPATH%
. - Unix использует команду "
printenv
" (среда печати) или "env
" для вывода списка всех переменных среды. Windows использует команду "комплект
". - Unix
PATH
устанавливается постоянно в сценарии входа в систему или инициализации оболочки (например, «~/.login
», «~/.profile
», «~/.bashrc
», «~/. bash_profile
" или "/etc/profile
"). WindowsPATH
постоянно устанавливается через Панель управления ⇒ Система ⇒ . ... - Текущий каталог НЕ включен в
PATH
Unix неявно. Чтобы запустить программу в текущем каталоге, вам нужно ввести "./имя_программы
"где".
"обозначает текущий каталог. Рекомендуется включать текущий каталог (.
) вPATH
явно. С другой стороны, текущий каталог неявно включается вPATH
Windows. - Путь Windows включает букву диска и каталоги. У каждого диска есть корневой каталог. Он использует обратную косую черту
'\'
в качестве разделителя каталогов (например, "c:\jdk1.6\bin
"). В путях Linux нет буквы диска. Есть один корень. Unix использует косую черту'/'
в качестве разделителя каталогов (например, "/usr/bin/jdk1.6
"). - Windows использует точку с запятой
';'
в качестве разделителя пути (например, в переменной средыPATH
), в то время как Unix использует двоеточие':'
. - Windows/DOS использует "
0D0AH
" (возврат каретки плюс перевод строки) в качестве разрыва строки (или конца строки (EOL) или новой строки). Unix/macOS использует только «0AH
» (перевод строки).
Команда SET — отображение или изменение переменных среды
Цель: | Дисплей, создание, модифицировать или удалить переменные среды |
FORMAT: | . P /S /U /V /X] [подстановочное имя]
Режим определения: SET [/= /A /B /D /M /O /S /U /V /E /RO /R [файл ...] /T:тип | имя=значение | приглашение ]
Режим удаления: SET [/= /D /M /S /U /V /E ] name=
См. также: ESET и UNSET.
Синтаксис завершения файла:
Синтаксис завершения имени файла по умолчанию: [/r] * [1] переменные [2*] *
Использование:
Каждая программа и команда наследует среду, которая представляет собой список пар имен переменных и значений. Каждое значение представляет собой непустую строку символов (т. е. в ней должен быть хотя бы один символ). Многие программы используют записи в среде для изменения своих собственных действий. Сам TCC использует несколько переменных среды.
Если вы просто наберете команду SET без опций или параметров, она отобразит все имена и значения всех определенных в данный момент переменных в среде. Как правило, вы увидите запись с именем PATH, запись с именем CMDLINE и любые другие переменные среды, установленные вами и вашими программами:0012
[c:\] set PATH=C:\;C:\UTIL CMDLINE=C:\TCMD\TCSTART.CMD
Если ввести только имя и нет переменной с это имя, SET отобразит все переменные среды, имена которых начинаются с имени. Например, если нет переменной pa, следующая команда отобразит все переменные, имена которых начинаются с pa:
set pa
Приведенная выше команда эквивалентна команде
set pa*
Если имеется только один параметр и он содержит один или несколько подстановочных знаков (извините, доступны только *), SET отобразит все соответствующие переменные среды. Вы не можете использовать подстановочные знаки для отображения переменных реестра (/D, /S, /U и /V).
Вы можете указать переменные для исключения из отображения SET с помощью переменной VariableExclude. Например, чтобы запретить отображение переменных процессора и пользователя:
set VariableExclude=proc*;user*
(Обратите внимание, что этот параметр не влияет на существование переменных, а только на то, отображаются ли они с помощью SET без аргументов.)
Чтобы добавить переменной среды, введите SET, пробел, имя переменной, знак равенства и требуемое значение:
set mine=c:\finance\myfiles
Имя переменной и текст после знака равенства знак останется таким, каким вы его ввели. Однако при поиске переменной регистр игнорируется; например, MyVar, myvar и MYVAR ссылаются на одну и ту же переменную. Если переменная уже существует, ее значение будет заменено введенным вами новым текстом.
Обычно не следует ставить пробел по обе стороны от знака равенства. Пробел перед знаком равенства станет частью имени; пробел после знака равенства станет частью значения.
Завершающий пробел в команде SET игнорируется. Чтобы создать переменную с конечным пробелом, используйте пару обратных кавычек после пробела:
set mine=%@repeat[20]``
делает мои 20 символов пробелов.
Если вы используете SET для создания переменной с тем же именем, что и одна из внутренних переменных TCC, вы отключите внутреннюю переменную. Если вы позже запустите пакетный файл или псевдоним, который зависит от этой внутренней переменной, он может работать неправильно. Как только вы удалите свою переменную, внутренняя переменная снова станет доступной.
Чтобы отобразить содержимое переменной, введите SET плюс имя переменной:
set mine
Вы можете редактировать переменные среды с помощью команды ESET. Чтобы удалить переменные из среды, используйте UNSET или введите SET, за которым следует имя переменной и знак равенства:
set mine=
Имя переменной ограничено 1024 символами.
Примечание. Вы не можете использовать SET для изменения переменных GOSUB.
Размер среды устанавливается автоматически и увеличивается по мере необходимости при добавлении переменных.
Переменные реестра
Windows хранит некоторые собственные переменные в реестре. Сюда входят переменные по умолчанию, система, пользователь и переменные. Этими переменными можно управлять с помощью параметров /D, /S, /U и /V команды SET соответственно. Например, чтобы отобразить содержимое изменчивой переменной clientname, используйте:
set /v clientname
Обратите внимание, что установка переменной реестра с использованием одного из параметров /D, /S, /U или /V не будет установите переменную в локальной среде, если вы также не используете параметр /E.
Пользовательские переменные зависят от пользователя, а изменчивые переменные действительны только для текущего сеанса Windows. Будьте осторожны при непосредственном изменении переменных реестра, поскольку они могут быть необходимы для различных процессов и приложений Windows.
Если установлен параметр конфигурации Обновлять среду при изменении системы, TCC будет отслеживать сообщение WM_SETTINGCHANGE и обновлять среду из записей пользовательского, нестабильного и системного реестра. Обновление выполняется всякий раз, когда TCC отображает приглашение (чтобы предотвратить изменение среды в середине команды).
Переменные массива
Помимо переменных среды, SET также используется для установки значений переменных массива. Например, чтобы определить массив из 5 строк на 10 столбцов, вы должны сначала использовать SETARRAY:
setarray array1[5,10]
Для установки значений массива (на основе 0) используется синтаксис :
set array1[a[b[c[d]]]
Например:
set array1[0,0]=Bob set array1[0,1]=Задание Боба
Чтобы расширить переменную массива:
echo Имя – %array[0,0], а задание – %array1[0,1] Параметры:
set /a var=2+2
set x=2 set /a y=x+2
При использовании с именем переменной и необязательной строкой приглашения, например. set /p myvar=Введите значение, эмулирует поведение CMD, разрешая ввод значения для переменной. Это предусмотрено только для совместимости. Для большей гибкости используйте команды TCC ESET или INPUT.
set > varlist set /r varlist
Вы можете загружать переменные из нескольких файлов, перечисляя имена файлов по отдельности после /R.
Если вы создаете файл SET /R вручную и вам необходимо создать запись, которая занимает несколько строк в файле, вы можете сделать это, завершив каждую строку (кроме последней) escape-символом. Однако вы не можете использовать этот метод для превышения ограничения длины командной строки. Вы также можете добавить строки комментариев к файлу, начав каждую с двоеточия:. Вы также можете использовать другие специальные символы, например, конечные пробелы, символы перенаправления и вертикальной черты (<>|), без необходимости экранирования символов. Если вы ссылаетесь на значение другой переменной в value (например, x=%path;c:\jpsoft), оценка этой переменной (path в примере) откладывается до тех пор, пока в будущем командная строка не оценит текущую переменную (x в пример), так что команда echo %x будет отображать путь, действующий при выполнении echo, независимо от того, какой путь мог быть, когда исходный SET определил x.
Если вы не укажете имя файла и ввод будет перенаправлен, SET /R будет считывать со стандартного ввода.
Использование команды Linux setUnix как второй язык org/Person" itemprop="author"> Сандра Генри-Стокер, Юникс Двиб, Сетевой мир | Гремлин / Getty ImagesКоманда Linux set позволяет изменить значение параметров оболочки или отобразить имена и значения переменных оболочки. Редко используемый, это встроенный bash, но он немного сложнее, чем большинство встроенных. Если вы используете команду без каких-либо аргументов, вы получите список всех настроек — имена и значения всех переменных оболочки и функций. Будьте осторожны! Вы получите поток вывода, текущий по вашему экрану. В моей системе Fedora не хватает 3000 строк вывода: $ набор | туалет -л 2954 Верх списка выглядит так же, как вы видите ниже, но вывод становится значительно сложнее по мере продвижения по нему. $ набор | голова -10 BASH=/бин/баш BASHOPTS=cdspell:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=([0]="0") BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_VERSINFO=([0]="2" [1]="11") BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="5" [1]="1" [2]="0" [3]="1" [4]="выпуск" [5]="x86_64-redhat-linux-gnu ") На практике есть несколько очень полезных вещей, которые вы можете делать с набором . Рассмотрим некоторые из них. Отладка сценариевВы можете использовать команду set -x для выполнения некоторой отладки сценариев. Другими словами, когда вы используете эту опцию, bash покажет вам намного больше вывода, который показывает, что делает ваш скрипт. Сценарий, используемый в этом примере, выполняет множество проверок, а затем печатает верхние строки выбранного файла. #!/бин/баш установить -х если [ $# -lt 2 ]; тогда echo "Использование: $0 строк имя файла" выход 1 фи если [ ! -f $2]; тогда echo "Ошибка: файл $2 не найден" выход 3 еще повторить начало файла голова -$1 $2 фи msg="пока" эхо $сообщение Без set -x вывод сценария будет выглядеть следующим образом: $ script3 3 file начало файла #!/бин/баш -x свидание до свидания С set -x он показывает каждую команду, как она выполняется, а также вывод. $ script3 3 файл + ‘[‘ 2 -lt 2 ‘]’ + [[ 3 != [0-9]* ]] + ‘[‘ ‘!’ -f файл ‘]’ + повторить начало файла начало файла + голова -3 файл #!/бин/баш -х свидание + сообщение=пока + эхо до свидания до свидания Вы также можете вызвать отладку, поместив -x в «строке shebang» (т. е. в верхней строке скрипта) следующим образом: #!/bin/bash -x Одним из преимуществ использования set -x , а затем set +x является то, что первый set запускает отладку, а второй set отключает ее, так что вы можете увидеть подробный вывод для небольшого раздел сценария, если это все, на чем вам нужно сосредоточиться. набор -х если [ ! -f $2]; тогда echo "Ошибка: файл $2 не найден" выход 3 еще повторить начало файла голова -$1 $2 фи установить +х Другие опции set можно включать и выключать таким же образом. Автоматический экспортИспользуя set -a , вы можете автоматически экспортировать любую созданную вами переменную или функцию, чтобы подоболочки и сценарии могли их использовать. Вот пример: $ set -a $ один=1 $ два=2 $ три = 3 $ четыре=4 $ /bin/bash <== запустить новую оболочку $ эхо $ один $ два $ три $ четыре 1 2 3 4 Немедленный выход в случае сбоя командыКоманда set -e приведет к завершению сценария, как только он столкнется с ошибкой. В этом примере вызывается команда set -e . $ сценарий кошки1 #!/бин/баш установить -е кот nosuchfile эхо «Пока!» Как вы могли догадаться, файла «nosuchfile» не существует, поэтому скрипт завершает работу в этот момент с помощью set -e . Последняя команда echo никогда не будет запущена. $ скрипт1 cat: nosuchfile: Нет такого файла или каталога Не игнорировать несуществующие переменныеПо умолчанию bash игнорирует несуществующие переменные. Например, в приведенном ниже сценарии bash пропустит тот факт, что $var2 не определено, и просто отобразит $var1 . $ сценарий кошки1 #!/бин/баш переменная1="123" эхо $var1 $var2 $ ./скрипт1 123 Если вы добавите в сценарий set -u , он сообщит о проблеме. $ кот скрипт2 #!/бин/баш установить -у переменная1="123" эхо $var1 $var2 $ ./script2 ./script1: строка 5: var2: несвязанная переменная Доступно много дополнительных опций набора , но это одни из самых полезных. |