Урок 10 по CMD - пользовательские подпрограммы, процедуры и функции. Командная строка set
[CMD] Переменные среды в командной строке
Классификация переменных средыСправка Windows различает два типа переменных среды: системные и локальные. Системные переменные возвращают одинаковые значения для всех пользователей. К примеру, %systemdrive% - буква системного диска, и она для всех пользователей одинакова. А вот значения, возвращаемые локальными переменными, варьируются в зависимости от вошедшего в систему пользователя. Например, %userprofile% может возвращать C:\Documents and Settings\ТекущийПользователь, где ТекущийПользователь - название учетной записи пользователя.
Узнать, какие переменные среды в операционной системе вам доступны и какие значения в данный момент им присвоены, вам поможет команда SET, запущенная из командной строки без параметров (Пуск – Выполнить – cmd – set). В рамках данной статьи нас интересуют переменные, обозначающие путь к различным папкам (каталогам). Чуть подробнее о некоторых из них ниже:
Использование переменных в пакетных файлах Начнем с простенького примера:
CMD/BATCH:
DEL /F /Q "%AllUsersProfile%\Главное меню\Активация Windows.lnk" DEL /F /Q "%AllUsersProfile%\Главное меню\WindowsUpdate.lnk" DEL /F /Q "%systemroot%\system32\*.scr" В этом примере я удаляю вышеуказанные ярлыки, которые маячат перед глазами в меню Пуск, используя переменную %AllUsersProfile%, а также все файлы с расширением SCR из директории Windows\system32, используя переменную %SystemRoot%. Вместо DEL /F /Q, как вы понимаете, может быть все что угодно: от команды копирования COPY до команды запуска установки нужного нам приложения со всеми параметрами командной строки, если это потребуется.Как задать свои переменные
Разобранный выше пример использовал уже существующие переменные среды. И вы, вероятно, обратили внимание на символы процентов, окружающие названия переменных. Эти символы нужны для того, чтобы разрешить подстановку значений переменной в командной строке или в пакетном файле. Символы процентов указывают на то, что Cmd.exe должна обратиться к значениям переменных, а не делать посимвольное сравнение. Ниже вы увидите, как это работает. Задать свои переменные в пакетном файле можно командой SET.
Команда SETВы можете задать в командном файле свои переменные при помощи все той же команды SET.
Чтобы добавить переменную, введите в командной строке:
Код:
set имя_переменной=значение Чтобы отобразить переменную, введите в командной строке:Код:
set имя_переменной Чтобы удалить переменную, введите в командной строке:Код:
set имя_переменной= Например,задает переменную mydir, которая будет возвращать путь к указанной папке. Подробнее о команде вы можете прочитать из set /?.Важное примечание: переменные, задаваемые командой set, действуют лишь на протяжении командной сессии (см. ниже), в которой они были заданы.
Эти переменные могут быть созданы, к примеру, для любых путей, надо лишь задать или найти алгоритм присвоения переменной в каждой частной ситуации, пользуясь готовыми примерами или создавая свои на их основе. Как правило, такие переменные создаются в текущей сессии командными файлами с помощью некоторых операторов.
Пример назначения переменных в файле RunOnceEx.cmd, импортирующем параметры в реестр
CMD/BATCH:
@echo off SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx SET i=100 REG ADD %KEY% /V TITLE /D "Installing Applications" /f REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f REG ADD %KEY%\%i% /V 2 /D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f SET /A i+=1 В данном скрипте командой SET задаются две переменных - %i% и %KEY%. Обратите внимание, что задаются они без символов процентов, а вот для обращения к ним %% уже нужны. Переменная %KEY% служит для упрощения и оптимизации кода. Она остается неизменной на протяжении текущей командной сессии, что избавляет от необходимости каждый раз включать в код раздел реестра. Каждый раз, когда в коде встречается %KEY%, будет происходить ее замена на HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx. А вот %i% служит для последовательной нумерации разделов реестра. При начальном значении 100 переменная увеличивается на единицу при помощи команды SET /A i+=1 после каждого блока команд, что дает последовательность 100, 101, 102 и т.д. Таким образом, строкаКод:
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100 /V 1 /D "C:\install\Software\WinRar.exe /s" /f Обратите внимание, что во фрагменте файла также используется системная переменная %systemdrive%, которая соответствует букве системного диска.Код:
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i: start /wait “%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe” В этом примере для всех перечисленных дисков происходит поиск определенного файла (WIN51). В случае его обнаружения на одном из дисков, последнему присваивается переменная %CDROM%, а далее уже происходит установка программного обеспечения с использованием пути, заданного созданной переменной.Изменение переменных среды и добавление собственных переменных
Как уже было сказано выше, действие переменных, заданных командой set, ограничивается текущей командной сессией. Если вы хотите получить из временной переменной системную или пользовательскую, то надо ее прописать в реестр. Сделать это тоже можно различными способами.
Утилита setenvУтилита работает из командной строки (сайт, загрузить). Работать с утилитой очень просто (setenv /?).
Код:
:: Creating and Setting Temp folder... md %systemdrive%\Temp setenv -u Temp %systemdrive%\Temp setenv -u Tmp %systemdrive%\Temp Утилита удобна тем, что после задания переменной ею можно пользоваться сразу. Ну почти сразу - в следующей командной сессии. Чтобы использовать ее в текущей сессии, можно задействовать старую знакомую команду set:Код:
:: Creating #EgOrus# var set EgOrus=D:\EgOrus setenv -u EgOrus %EgOrus% Импорт параметров в реестр Если же пойти путем внесения изменений в реестр после первого входа в систему, то переменные начнут "работать" только после перезагрузки или завершения пользовательского сеанса. Конечно, в процессе автоустановки можно импортировать желаемые параметры на Т-12 (см. статью Твики реестра) и обойти данную проблему. Если же вы не собираетесь использовать назначенную переменную в текущем пользовательском сеансе, то импорт в реестр вас тоже может устроить. Процесс импорта REG-файлов описывать повторно не буду, а рассмотрю команду REG ADD на конкретном примере.Допустим, вы заинтересованы иметь в системе переменную %CDROM% на постоянной основе и установить ее в процессе установки приложений с CD. Следуя коду, приведенному выше, нужно после определения переменной назначить ее системной.
CMD/BATCH:
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i: REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v cdrom /d %CDROM% /f После нахождения файла WIN51 диску, на котором он был найден, присваивается локальная переменная %CDROM%, которая тут же и назначается в виде постоянной системной переменной посредством импорта в реестр. Этот метод предложил в одной из тем на конференции Oszone Sanja Alone. Заодно вы узнали. где в реестре хранятся настройки системных переменных. Настройки пользовательских переменных хранятся в HKCU\Environment. Пути, возвращаемые переменными %PROGRAMFILES% и %COMMONPROGRAMFILES%, можно посмотреть в параметрах ProgramFilesDir и CommonFilesDir в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion, но менять их там не следует. Каталоги установки программ (отличные от %SystemDrive%\Program Files) нужно конфигурировать через файл ответов.РезюмеКомандная оболочка Windows (cmd.exe) - это весьма мощный инструмент работы с системой. При помощи пакетных файлов можно автоматизировать изрядное количество задач, и именно поэтому они часто используются для автоматической установки Windows. Умелое использование переменных в пакетных файлах позволяет решать широкий спектр вопросов. Работа с командной оболочкой становится более эффективной и одновременно упрощается код пакетных файлов. Другие примеры использования переменных вы можете найти на страницах сайта или форума. Все примеры, использованные в этой статье, взяты из скриптов участников форума OsZone.ru, за что им большое спасибо.
ТерминологияКомандная оболочка — это отдельный программный продукт, который обеспечивает прямую связь между пользователем и операционной системой. Текстовый пользовательский интерфейс командной строки предоставляет среду, в которой выполняются приложения и служебные программы с текстовым интерфейсом.
cmd.exe - интерпретатор команд, который командная оболочка ОС Windows использует для перевода введенной команды в формат, понятный системе.
Командная сессия может инициироваться как запуском cmd.exe, так и запуском пакетного файла. Иными словами создается текущая командная оболочка. Соответственно выход из этой оболочки (к примеру, окончание работы пакетного файла) завершает командную сессию.
Пользовательский сеанс (пользовательская сессия) начинается с момента входа пользователя в систему (log on) и завершается при выходе (log off).
safezone.cc
Устанавливает, удаляет и просматривает переменные среды. Вызванная без параметров, команда set выводит список установленных переменных среды и их значений. Синтаксисset [[/a [выражение]] [/p [переменная=]] строка] Параметры/a Указывает, что параметр строка является вычисляемым числовым выражением. /p Задает значение переменной строкой ввода. переменная Указывает имя переменной, значение которой требуется задать или изменить. строка Задает строковое значение для указанной переменной. /? Отображает справку в командной строке.Примечания
ПримерыЧтобы задать переменную среды с именем TEST^1, введите команду: set testVar=test^^1 Чтобы задать переменную среды с именем TEST&1, введите команду: set testVar=test^&1 Значением переменной команды set определяет все, что следует за знаком равенства (=). При вводе: set testVar="test^1" Результат будет следующим:testVar="test^1" Для установки переменной среды INCLUDE так, чтобы с ней была связана строка C:\Inc (каталог Inc на диске C), можно использовать следующую команду: set include=c:\inc Строку C:\Inc можно использовать в пакетных файлах, заключив имя INCLUDE в знаки процента (%). Например, в пакетном файле можно использовать следующую команду для вывода содержимого каталога, на который указывает переменная среды INCLUDE: dir %include% При выполнении команды строка %include% будет заменена строкой C:\Inc. Можно также использовать команду set в пакетной программе, которая добавляет новый каталог к переменной среды PATH. Например: @echo off rem ADDPATH.BAT добавляет новый каталог rem к переменной среды path. set path=%1;%path% set При включенных расширениях команды (установлено по умолчанию) и выполнении команды set со значением, на экран выводятся все переменные среды, соответствующие значению. Например, при вводе в командную строку : set p, результат будет следующим: Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\WbemPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSHPROCESSOR_ARCHITECTURE=x86PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, GenuineIntelPROCESSOR_LEVEL=6PROCESSOR_REVISION=0801ProgramFiles=C:\Program FilesPROMPT=$P$G |
www.windowsfaq.ru
Как настроить сеть через командную строку (cmd)? Команды командной строки для сети.
Мы привыкли настраивать сеть через интерфейс Windows, а точнее через Цент управления сетями и общим доступом \ Сетевые подключения \ Свойства сетевого подключения.
Но, что делать, если у нас не доступна данная оболочка, но нам нужно настроить сеть на компьютере? В какой ситуации это может быть. Допустим, я рассмотрю ситуацию, когда выполнял тестирование системы резервирования для Windows Server 2008R2 с сохранением образа системы на сетевом ресурсе. И в ситуации, если у вас операционная система полностью вышла из строя и вы не можете выполнить вход в систему, пригодятся знания настройки сетевого подключения через командную строку (cmd).
Так как в оболочке для восстановления работоспособности Windows нет специальных элементов для настройки сетевого подключения через дружественный интерфейс.
Для того, чтобы запустить командную строку (cmd) из оболочки восстановления нужно нажать сочетание клавиш Shift+F10.
Первым делом посмотрим какие сетевые настройки назначены нашему сетевому адаптеру автоматически?
Ipconfig
Если мы хотим изменить настройки сетевого подключения, то в этом нам поможет утилита NETSH:
netsh interface ip set address name=”Подключение по локальной сети” static 192.168.0.1 255.255.255.0
Если вы хотите обратно назначить получение автоматических настроек сети через службу DHCP, то выполните команду:
netsh interface ip set address name=”Подключение по локальной сети” dhcp
Если вы хотите отблагодарить автора, поделитесь данной статьей в своей социальной сети. Я буду очень рад, если данный материал поможет еще кому-то решить свой вопрос! В замен, вы получите не большой, но приятый бонус ;-)
sys-team-admin.ru
Урок 10 по CMD - пользовательские подпрограммы, процедуры и функции
В этой статье мы рассмотрим, пользовательские подпрограммы, процедуры и функции командной строки, хотя… эти термины довольно условны в командной оболочке.
И так, давайте посмотрим, что именно подразумевается под этими терминами:
Подпрограмма – это билет в один конец. Во время вызова подпрограммы происходит переход на заданную метку, после чего код будет выполняться до конца сценария командной строки. Для перехода на заданную метку используется оператор goto. Такой оператор используется во многих языках программирования и с точки зрения программирования, его использование является плохим стилем.
Давайте рассмотрим такой пример:
@echo off if "%1"=="" ( echo Peredayte parametry scenariju!) & (goto EXIT) if "%1"=="1" goto SUB1 if "%1"=="10" goto SUB2 if "%1"=="100" goto SUB3 goto EXIT :SUB1 set/A var1=%1+100 echo %var1% set var1= goto EXIT :SUB2 set/A var2=%1+1 echo %var2% set var2= goto EXIT :SUB3 set/A var3=%1+1000 echo %var3% set var3= goto EXIT :EXIT echo Zaversajem rabotu... |
Видим, что для объявления метки, перед ее именем ставится двоеточие, тут мы объявили три метки: SUB1, SUB2, SUB3 и EXIT. В самом начале сценариях мы отключаем вывод эхо-сообщений с помощью функции командной строки echo. Далее идет проверка условия с помощью условного оператора if, в нем мы проверяем первый переданный аргумент сценарию (%1):
Если аргумент пустой, то происходит вывод сообщения, что надо передать аргумент сценарию, далее сразу происходит переход к метке EXIT. Видим, что тут мы сгруппировали две команды с помощью оператора &.
Если аргумент равен 1, то идет переход к метке SUB1. Тут мы создаем переменную var1 с помощью ключевого функции set командной строки, в переменной к первому аргументу прибавляется число 100, потом следует вывод результата, удаление переменной и переход к метке EXIT.
Если аргумент равен 10, то идет переход к метке SUB2. Аналогично, создается переменная var2 и происходит прибавление к аргументу 1.
Если аргумент равен 100, то идет переход к метке SUB3. Тут уже прибавляется 1000.
Обратите внимание, что если мы передадим условию значения, не проверяемые в условных операторах, например 400, то тоже произойдет переход к метке EXIT. Стоит понимать, что если мы уберем переход к метке, то код будет выполняться построчно до самого конца сценария.
Думаю, вы догадались, что можно с помощью оператора GOTO создать бесконечный цикл, например:
@echo off set sum=1 :SUB1 set/A sum+=1 echo %sum% goto SUB1 |
Тут происходит создание переменной sum со значением 1. После метки SUB1 происходит добавление к sum числа 1, вывод результата и переход к этой же метке. Цикл будет выполняться бесконечно, что бы прекратить выполнение сценария нажмите комбинацию клавиш Ctrl+C.
Процедуры – в других языках программирования это блок кода, который можно многократно вызывать, сама процедура ничего не возвращает. В командной строке под процедурой имеется нечто другое: тут с помощью функции call командной строки мы можем вызвать другую программу, в итоге, после завершения работы вызванной программы или сценария управление вновь передастся в текущий сценарий на следующую строчку, находящуюся после оператора вызова.
Давайте посмотрим такой пример:
@echo off set var=d:\work\test.bat call notepad.exe "%var%" call calc.exe dir set var= |
В данном примере созданная переменная var будет хранить путь к файлу test.bat (в моем случае это текущий сценарий). Потом мы вызываем программу notepad.exe (блокнот) , передавая ей путь к файлу. Как только мы закроем блокнот, произойдет вызов калькулятора. После завершения работы программы calc.exe (калькулятор) будет вызвана функция командной строки dir и произойдет вывод содержимого текущего каталога. В самом конце мы удаляем переменную var.
Учтите, что вы можете вызвать другую программу и без использования функции call, но в этом случае контроль над дочерним приложением будет утерян.
Вы можете написать и такой сценарий:
@echo off call dir call echo Hello World |
это аналогично такому коду:
@echo off dir echo Hello World |
или такому:
@echo off dir & echo Hello World |
Функции – для остальных языков программирования это тоже блок кода, который можно многократно вызывать в теле сценария. Задача функции – вернуть некое значение, которое потом можно обработать. В командной строке функции носят приблизительно тот же характер, давайте посмотрим на такой пример:
@echo off if "%1"=="" ( echo Peredayte parametry scenariju!) & (goto EXIT) call :FACT %1 echo %Result% goto :EXIT :FACT if %1 == 0 (set Result=1 & exit /b) if %1 == 1 (set Result=1 & exit /b) set /A PARAM=%1 - 1 call :FACT %PARAM% set /A Result=%1 * %Result% exit /b :EXIT |
В данном примере используется рекурсия для вычисления факториала заданного числа. Сперва происходит проверка условия – если сценарий запущен без аргументов, то идет вывод предупреждающего сообщения и переход к метке EXIT.
Далее следует вызов метки FACT со значение переданного параметра. После метки FACT происходит проверка на равенство 0 и 1, оператор exit/b говорит, что нужно произвести возврат в т место, откуда была вызвана данная строка. То есть, произойдет возврат в начало сценария к строке, следующей за строкой call :FACT %1, то есть, произойдет вывод содержимого переменной Result с помощью функции командной строки echo и переход к метке EXIT.
Если переданный параметр не равен 0 или один, то от него отнимается единиц и происходит снова возврат к метке FACT. Фактически мы циклично уменьшаем переданное значение до 1 и потом снова циклично умножаем его на значение, меньшее на 1.
Если передать сценарию аргумент содержащий символы, а не цифры, то произойдет ошибка.
scriptcoding.ru
Использование параметров командной строки
Вызов командных файлов можно параметризовать. Под этим подразумева-ется вызов командного файла с передачей ему от одного до нескольких парамет-ров. В таком случае скрипт, помещенный в командный файл, может обрабатывать различную информацию при разных параметрах вызова, делая его гибче и адап-тированнее нуждам оператора. Например, командный файл архивирования фай-лов в некоторой папке может получать имя обрабатываемой папки из параметров вызова и тогда его можно применять к различным папкам, а не к одной, имя кото-рой жестко прописано в коде командного скрипта.
Для доступа к параметрам командной строки в командном файле приме-няются символы %0, %1,…,%9. При этом вместо %0 всегда подставляется имя выполняемого пакетного файла, а вместо %1, %2,…, %9 — значения первых де-вяти параметров командной строки соответственно Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то "лишние" перемен-ные из %1 - %9 являются пустыми строками. Модифицируем ранее рассмотрен-ный пример архивирования и удаления файлов arc.bat.
rem Вызов arc.bat имя_папки маска_файлов имя_архива
@echo off
d:\winrar\rar a %1\%3 %1\%2 del %1\%2
Теперь этот командный файл необходимо вызывать с тремя параметрами: в первом передается полный путь к папке с файлами, второй параметр определяет маску файлов, подлежащих архивации и удалению, а третий параметр задает имя архива, в который будут помещены заархивированные файлы.
Обратиться к командному файлу можно так:
arc.bat d:\tmp *.txt arc.rar
А для другой папки, возможно, потребуется архивация файлов с расшире-нием log и вызов командного файла примет вид:
arc.bat d:\work\logs *.log log.rar
Если в командный файл передается более 9 параметров, на помощь прихо-дит команда shift, которая сдвигает значения параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2—в%1и т.д.Замещаемому параметру%9присваивается десятое значениепараметра вызова. Если же такой параметр не задан, то переменная %9 получит в
качестве значения пустую строку. Необходимо помнить, что не существует ко-манды, обратной shift. Таким образом, не удастся восстановить параметр (%0) после выполнения команды shift.
Команда shift поддерживает ключ /n, который указывает команде начинать сдвиг с N-го аргумента, где N — число от нуля до восьми. Например:
Shift /3
сдвинет %4 на %3, %5 на %4 и т. д. %0, %1 и %2 останутся неизменными. Если в командной строке задано больше десяти параметров, то команду
shiftможно использовать несколько раз.
Для практических случаев использования командных файлов нередки слу-чаи, когда в качестве параметров им передаются имена файлов и папок. В этом случае в командном файле может встать проблема выделения из этого имени со-ставляющих частей – названия диска, пути, непосредственно имени или расшире-ния файла. Для автоматического выделения подобных объектов можно использо-вать операторы, перечисленные в таблице 7.
Таблица 7 - Операторы для заменяемых параметров | |
Операторы | Описание |
%~Fn | Переменная %n расширяется до полного имени файла |
%~Dn | Из переменной %n выделяется только имя диска |
%~Pn | Из переменной %n выделяется только путь к файлу |
%~Nn | Из переменной %n выделяется только имя файла |
%~Xn | Из переменной %n выделяется расширение имени файла |
%~Sn | Значение операторов N и X для переменной %n изменяется так, что |
они работают с кратким именем файла | |
%~Tn | Дата и время создания файла |
%~Zn | Размер файла |
%~An | Атрибуты файла |
%~$PATH:n | Проводится поиск по каталогам, заданным в переменной сре- |
ды PATH, и переменная %n заменяется на полное имя первого най- | |
денного файла. Если переменная PATH не определена или в резуль- | |
тате поиска не найден ни один файл, эта конструкция заменяется на | |
пустую строку. Переменную PATH можно заменить на любое другое | |
допустимое значение | |
Например, всегда можно узнать, с какого диска был запущен командный
файл:
echo %~D0
Комбинируя операторы из таблицы 7, можно получать составные конст-рукции:
%~DPn — из переменной %n выделяется имя диска и путь, %~NXn — из переменной %n выделяется имя файла и расширение Команда
ren %1 %~N1_old%~X1
переименует файл, имя которого передается в качестве параметра, дописав к име-
ни файла _old: file.dat переименуется в file_old.dat.
Взаимодействие пользователя с командных файлов
Для взаимодействия пользователя с командным файлом предусмотрен го-раздо меньший выбор средств по сравнению с традиционными алгоритмически-ми языками.
Для того чтобы вручную прервать выполнение запущенного командно-го файла, необходимо нажать клавиши <Ctrl>+<C> или <Ctrl>+<Break>. Если надо лишь приостановить работу командного файла до момента нажатия клавиши на клавиатуре, можно воспользоваться командой pause. Хорошим стилем счита-ется выдача предупреждения пользователя о потенциально опасных для данных командах и приостановкой выполнения. Тогда у пользователя будет возможность продолжить выполнения командного скрипта при нажатии клавиши или его за-
вершения по <Ctrl>+<C> / <Ctrl>+<Break>:
ECHO Сейчас будут удалены все файлы в d:\work ECHO Для отмены нажмите Ctrl-C
PAUSE
DEL d:\work\*.*
Для того, чтобы пользователь мог задать значение переменной с клавиату-ры используется команда set с ключом /p:
SET /P имя переменной = текст
Пользователю будет выведен текст-приглашение и командный файл пе-рейдет в режим ожидания ввода с клавиатуры. Введенная строка заносится в пе-ременную среды.
set /p Folder=Введите имя папки
Еще одну интересную возможность – делать выбор одного из альтернатив-ных вариантов, предоставляет команда choice.
Команды передачи управления
Последовательное выполнение команд в командном файле можно прервать несколькими способами. Во-первых, можно использовать команду перехода
Goto метка
Эта, табуированная в языках высокого уровня, команда в условиях слабо структурируемых командных файлов используется довольно часто. Метка, на ко-торую осуществляется переход по этой команде, оформляется следующим обра-зом:
:метка
Очевидно, что безусловный переход должен быть обусловлен командой if, иначе не выполнятся команды, помещенные между командой перехода и меткой в случае перехода вперед или произойдет зацикливание при переходе назад. В ка-честве метки перехода можно указывать строку :eof, которая передает управление в конец текущего пакетного файла:
@ЕСНО OFF
REM Если файл был запущен без параметров, выходим из него, REM иначе печатаем первый параметр
IF -%1==- GOTO :EOF ECHO %1
Второй способ передачи управления, причем как внутри самого пакетного файла, так и при обращении к другим пакетным файлам – использование команды
call.
Для того, чтобы обратиться к внешнему командному файлу достаточно указать его и его параметры в команде call:
call файл пакетные_параметры
Пример:
Call test.bat par1 par2 par3
Данный вызов приведет к передаче управления командному файлу test.bat c тремя указанными параметрами. Альтернативой подобному запуску может стать использование имени стороннего командного файла в качестве имени команды:
Test.bat par1 par2 par3
Но при последнем вызове после окончания работы командного файла test.bat управление не будет возвращено в вызывавший командный файл, а, следо-вательно, не будут выполнены все следующие за командой вызова инструкции. Вызов же командой call позволяет по окончании работы вызванного командного файла вернуться в вызвавший и продолжить его выполнение.
В качестве адресата вызова команды call допустимо использовать метки внутри текущего командного файла:
CALL :метка аргументы
При вызове такой команды создается новый контекст текущего пакетного файла с заданными аргументами и управление передается на инструкцию, распо-ложенную сразу после метки. Для выхода из такого пакетного файла необходимо два раза завершить его работу, достигнув конца командного скрипта или вызвав команду exit /b (ключ /b позволяет завершить работу лишь командного файла, а не сеанса оболочки). При этом первый выход будет означать возврат управления на инструкцию, расположенную сразу после строки call, а второй выход заверша-ет выполнение пакетного файла. Такое поведение команды call позволяет оформ-лять фрагменты кода в виде подпрограмм:
Call :proc1 par1 par2
...
:proc1
rem Здесь %0=:proc1 %1=par1 %2=par2
...
Exit /b
...
Команды перехода
Организация ветвлений алгоритмов в зависимости от выполнения или не-
выполнения того или иного условия является одной из популярнейших структур-ных конструкций при написании программ на большинстве языков программиро-вания. Не стал исключением и язык командных файлов. Для организации перехо-да по условию здесь может быть использована команда if. Ниже представлены все возможные варианты вызова этой команды.
if [/i] [not] строка1==строка2 команда [else команда] if [not] errorlevel число команда [else команда]
if [not] exist имя_файла команда [else команда]
if [/i] строка1 оп_сравнения строка2 команда [else команда] if cmdextversion число команда [else команда]
if defined переменная команда [else команда]
Первый вариант операции сравнения позволяет выполнить команду в зави-симости от совпадения или несовпадения двух строк (которые могут быть пред-ставлены и переменными). Например, так мы можем предотвратить запуск ко-мандного файла без параметров:
@echo off
if -%1 == - goto :eof
…
При сравнении с использованием переменных всегда необходимо учиты-вать возможный вариант отсутствия переменной с указанном имени в текущем контексте командного окна. Например, если командный файл запущен без пара-метров, то переменная %1 будет не определена, и на этапе выполнения безобид-ная на первый взгляд конструкция
if %1 == /h goto help
приведет к ошибке из-за отсутствия левого операнда в операторе сравнения. По-этому рекомендуется использовать в правой и левой части операции сравнения какой-нибудь дополнительный символ, например '-' (или заключать сравниваемые объекты в кавычки).
Второй вариант команды if опирается на результат выполнения предыду-щей команды. Здесь необходимо учесть, что в результате своего выполнения ко-манды Windows выставляют переменную окружения errorlevel в значение кода своего завершения. Общепринято, что код завершения 0 соответствует успешно-му завершению команды, а 1 и более – неудачному завершению (например, ниче-го не найдено командой find, команда ping не получила ответ на запрос, команда delне смогла удалить файл и т.п.)и анализ значения переменной дает возмож-ность выполнить различные действия, например, при успешном или неуспешном выполнении предшествующей команды:
ping www.volpi.ru >nul if %errorlevel% 1 (
echo %date% %time% Нет связи с сайтом www.volpi.ru>> report.txt ipconfig /all >>report.txt
)
Приведенный выше пример иллюстрирует возможность выполнения не-скольких команд в случае выполнения (или невыполнения) заданного условия. Для группировки команд используются круглые скобки.
Если алгоритм работы командного файла предусматривает переход в слу-
чае отношений «больше», «меньше», «больше или равно», «меньше или равно», то можно использовать другой синтаксический вариант команды if:
if [/i] строка1 оп_сравнения строка2 команда [else команда]
Здесь для сравнения используются трехбуквенные операторы, названия и назначение которых приведены в таблице 8. Ключ /i позволяет игнорировать ре-гистр символов при сравнении.
Таблица 8. Операторы сравнения в команде if | |
Оператор | Описание |
EQU | равно |
NEQ | не равно |
LSS | меньше |
LEQ | меньше или равно |
GTR | больше |
GEQ | больше или равно |
call test.bat par1 par2 par3 if %errorlevel% GTR 1 (
infopedia.su
Командная строка и режим Rescue
У пользователя существует несколько путей для исправления ситуации сбойной загрузки. Если меню все еще доступно, записи могут быть просмотрены и изменены пользователем. Кроме того, если GRUB 2 обнаруживает ошибки в процессе загрузки и не может передать управление указанному в записи ядру из-за ошибки в grub.cfg, он переходит в режим Rescue. Оба метода позволяют пользователю восстановить работоспособную систему через урезанный интерфейс командной строки. Если вверху экрана появляется только слово "Grub", без меню или приглашения командной строки, тогда пользователь будет вынужден обратиться к процедуре переустановки.
Для поиска на разделах диска в сложных случаях применяются следующие соображения. Каталог /boot должен содержать как минимум один файл ядра (vmlinuz) и один образ RAM-диска (initrd.img). Каталог /boot/grub должен содержать grub.cfg и различные файлы с расширением .mod. X - это номера дисков, начинаются с 0. Y - номера разделов, начинаются с 1. Для двойной загрузки Windows и Linux с одного диска нормальной ситуацией является расположение /boot на разделе hd0,5 . Используйте команду ls для обнаружения разделов, которые известны GRUB 2.
Для перехода в командную строку (если приглашение еще не появилось) используется команда "c" . В командной строке:
lsиспользуется для просмотра всех дисков и разделов, которые смог распознать GRUB 2.
ls (hdX,Y)/- для просмотра содержимого раздела Y на диске X.
ls (hdX,Y)/boot- для просмотра содержимого каталога /boot на диске X в разделе Y.
ls (hdX,Y)/boot/grub- отображает содержимое каталога /boot/grub на диске X в разделе Y. Например: ls (hd0,5)/boot/grub
Редактирование записей в процессе загрузки
Если меню не появляется обычным образом, нажмите и удерживайте клавишу SHIFT до появления меню GRUB 2 . Если меню появилось, достаточно нажать любую клавишу кроме ENTER для отключения таймера, по истечении таймаута которого произойдет автоматическая загрузка. Для выбора записи используются стрелки "Вверх" и "Вниз".Для редактирования выбранной секции нажмите "e".
Для перемещения курсора используется клавиатура. В этом примере курсор был перемещен к символу 9, который пользователь может изменить или удалить.Для перемещения между строками не используйте клавишу Enter. В одной или многих строках можно сделать необходимые изменения.Для автодополнения записей можно использовать клавишу Tab, как в командной строке bash.
Когда редактирование закончено, используются следующие возможности:
** CTRL-x - загрузка с измененными параметрами;** CTRL-c - переход в командную строку для производства диагностики, загрузки модулей, изменения установок;** Esc - отмена произведенных изменений и возврат в главное меню.
Эти возможности представлены внизу экрана для напоминания.
Режим командной строки
Из главного меню можно перейти в режим командной строки путем нажатия клавиши "с".
Полезные возможности при работе с командной строкой:
1. Отключение фонового изображения меню может облегчить просмотр вывода на терминал. Нажмите "с" для выхода в командную строку и далее введите: set color_normal=white/blue или комбинацию цветов, которая вам больше нравится. При редактировании фоновое изображение больше не будет отвлекать.
2. Для предотвращения быстрой прокрутки экранов введите set pager=1 . Это работает подобно "| more" в командной строке ОС. Теперь можно переключать экраны далее по выводу с помощью клавиши Enter.
3. Для вывода списка команд введите help . Для помощи по командам, начинающимся на "x", введите help x .
4. Автодополнение ввода с помощью Tab может помочь при вводе записи, если вводимый элемент уникален, или может вывести все возможности, если есть альтернативы.
Полезные команды включают:
Команда | Назначение |
background_image | Загружает имеющийся фоновый рисунок. Введите background_image=/usr/share/images/grub/ и затем нажмите Tab для получения доступных рисунков |
cat | Выводит содержимое указанного файла, например cat /boot/grub/grub.cfg или cat /etc/fstab |
help | Показывает все доступные команды. Полезно перед вводом help ввести "set pager=1", помогает в случае многоэкранной справки |
ls | Использованная в одиночестве, выводит список устройств, доступных GRUB 2. Для просмотра состава каталогов используйте их имена в качестве параметров |
initrd | Загружает initrd |
linux | Загружает ядро |
loopback | Монтирует файл как устройство, например loopback loop (hd0,2)/iso/my.iso |
lsmod | Выводит список загруженных модулей |
reboot | Перезагружает машину |
rescue | Переводит в режим восстановления |
set | Выводит переменные окружения. В комбинации с параметрами устанавливает значения системных переменных, например set gfxmode=640x480, set color_normal=cyan/black |
vbeinfo | Выводит доступные монитору разрешения |
Использование интерфейса командной строки в процессе загрузки
Если меню видно, но имеются проблемы при загрузке, наиболее простой способ отладки - редактирование записей. Если GRUB 2 не находит правильный grub.cfg, он переходит в режим восстановления. Приглашение командной строки режима восстановления будет выглядеть как grub-rescue> , меню показываться не будет. Из этой командной строки пользователь может задать рабочие параметры загрузки.Если режим восстановления не запустился, необходимо перейти в приглашение командной строки с помощью "с". Возникнет приглашение grub> или grub-rescue> .Если в любой момент нажать Esc, то все произведенные изменения отменятся и будет выведено меню.
Для поиска устройств (дисков) и разделов, которые GRUB 2 обнаружил, как известные ему разделы, используется две команды:set и ls.
Если ввести set без параметров, будут выведены текущие установки GRUB 2. Команда ls без параметров выведет список "знакомых" GRUB 2 дисков и партиций, например, (hd0) (hd0,1) (hd1,5) будут соответствовать диску sda и его разделам sda1, sdb5.
Для экспресс-загрузки системы нужно ввести следующую последовательность команд:
set root=(hdX,Y) linux /vmlinuz root=/dev/sdXY ro initrd /initrd.img bootКаждая строка завершается нажатием Enter. Некоторые команды ничего не выводят и это нормально. Если вернулось "file not found" или что-то подобное, следует внимательно проверить значения X и Y, которые, естественно, должны соответствовать текущей ситуации. Верные значения поможет определить команда ls. Затем вводится корректирующая команда:
set prefix=(hdX,Y)/boot/grubЗначения команд:
set root=(hdX,Y) - устанавливает корневым разделом раздел Y на диске X. Помните, что диски нумеруются с нуля, партиции - с единицы;
linux /vmlinuz root=/dev/sdXY ro - указывает название файла ядра на корневой файловой системе;
initrd /initrd.img - указывает название файла образа рам-диска инициализации;
boot - производит загрузку с последней указанной версией ядра и с последней указанной версией файла образа инит-диска.
Файлы vmlinuz и initrd.img могут быть ссылками в корневом каталоге файловой системы. Если есть необходимость обратиться непосредственно к файлам, можно после linux ввести /boot/ и нажать Tab. Будет выведен список доступных ядер или произойдет автозаполнение командной строки (если ядро одно). Если ни одного доступного ядра нет, следует проверить команду set root, указывает ли она на правильную локацию.
Если команды linux и initrd.img были правильные, после них выводится подсвеченное имя ядра и образа инит-диска, как показано ниже.
Изменения, которые были произведены вводом команд, не являются постоянными и действуют только в текущей сессии. После успешной загрузки пользователь должен ввести sudo update-grub и проинспектировать файл конфигурации /boot/grub/grub.cfg .При проблемах с загрузкой основной системы прежде всего следует проверить правильность строк search, linux, и initrd в секции [### BEGIN /etc/grub.d/10_linux ###].
Режим Rescue
Режим восстановления - основное отличие в возможностях GRUB 2 по сравнению с GRUB. Если загрузчик не смог обнаружить правильный файл grub.cfg или не смог передать управление ядру, он выпадает в rescue-консоль:
grub-rescue>
Из этого приглашения доступны команды, с помощью которых можно обнаружить проблемы и добиться успешной загрузки. Все команды обычного режима командной строки также поддерживаются. Среди дополнительных команд:
Команда | Назначение |
dump | Очищает память |
exit | Команда выхода из GRUB 2 |
normal | Возвращает в обычный режим командной строки, если это возможно |
chainloader | Указывает последующей команде boot передать управление цепочечному загрузчику |
kfreebsd | Группа команд для загрузки ядра FreeBSD, его модулей и определения его переменных окружения |
kfreebsd_loadenv | |
kfreebsd_module | |
insmod | Загружает указанный модуль ядра |
rmmod | Выгружает указанный модуль ядра |
multiboot | |
unset | Уничтожает переменную окружения |
Для того, чтобы все команды, и основные, и дополнительные, были доступны, нужно загрузить модуль normal с помощью команды:
insmod normalДля правильной работы переменная prefix должна указывать на корректное место расположения каталога GRUB 2, без этого команды rescue работать не будут. Кроме того, требуется загрузка модуля linux, так как без него не получится загрузить ядро и инит-диск. Если префикс указывает в неверное место, будут сообщения об ошибке типа "неизвестная команда" или "файл не найден".
Для облегчения поиска верного системного раздела используется команда ls. Сначала найдите все известные разделы, затем в них - каталоги и файлы загрузчика. Например:
ls возвратила имена дисков и разделов: (hd0) (hd0,1) (hd0,5) (hd1) (hd1,1)
тогда ls (hd0,5)/boot возвратит файлы и каталоги в каталоге /boot на диске sda, ls (hd0,5)/boot/grub - файлы и каталоги в /boot/grub на дисковом разделе sda5. Если путь корректно указывает на /boot/grub в системе Ubuntu, тогда еще будут видны различные файлы модулей (файлы *.mod).
Далее должны быть правильно установлены префикс и корневой раздел. Например:
set prefix=(hd0,5)/boot/grub set root=(hd0,5)Текущие значения префикса и корня могут быть в любой момент проверены с помощью команды set.
Теперь могут быть загружены модули. Это должно произойти до попытки их использования. Так, модуль linux используется для загрузки ядра и инит-диска. Для загрузки используется команда insmod linux или insmod /boot/grub/linux.mod .
Пример группы команд:
ls set prefix=(hdX,Y)/boot/grub set root=(hdX,Y) set ls /boot insmod /boot/grub/linux.mod linux /vmlinuz root=/dev/sdXY ro initrd /initrd.img bootРассмотрим подробнее значения команд.
1. ls выводит известные диски и разделы. Далее пользователь должен задать диск и раздел, где находится система.
2. set prefix=(hdX,Y)/boot/grub задает абсолютный путь к каталогу загрузчика.
3. set root=(hdX,Y) Здесь X - диск, нумерация стартует с нуля. Y - раздел, нумерация стартует с единицы.
4. set поможет найти строку "prefix=" . Она должна правильно указывать на корневой раздел в формате: prefix=(hdX,Y)/boot/grub.
5. ls /boot/ просматривает содержимое каталога. Должны быть видны разные ядра, инит-диски и каталог /grub. Если нет, возвращаемся к поиску через ls.
6. insmod /boot/grub/linux.mod загружает модлуь linux.
7. linux /vmlinuz root=/dev/sdXY ro выбирает ядро системы.
8. initrd /initrd.img выбирает образ инит-диска. После нажатия ENTER пользователь может увидеть, а может и не увидеть вывод имени выбранного образа.
9. boot загружает систему со всеми выбранными параметрами.
Изменения, внесенные командами, действуют только на время текущей сессии.
Назад - Записи меню, создаваемые пользователем Содержание
www.lexpr.ru
Что вводить в командной строке. Командная строка. Операторы Командной строки, переменные и вспомогательные символы
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГБОУ ВПО «МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ»
Кафедра информационных систем, технологий и автоматизации в строительстве
«Основы командной строки Windows »
Лабораторный практикум
по курсу «Операционные системы»
Как начинающий разработчик, вы должны постоянно искать советы, приемы и ресурсы, чтобы сделать программирование более эффективным. Подготовьтесь добавить еще один отличный инструмент в ваш ковш сегодня - терминал и командную строку. Командная строка может казаться пугающей при первом доступе к ней, но как только вы начнете ее регулярно использовать, вы быстро начнете узнавать, как использовать этот мощный инструмент.
Командная строка используется для ввода команд в операционную систему вместо графического интерфейса пользователя. Это связано с тем, что командная строка гораздо более гибкая, чем графический интерфейс, что делает его настолько удобным для разработчиков.
М о с к в а 2 0 1 2
Составитель:
доцент кафедры ИСТАС Иванов Н.А.
Методические указания содержат основные сведения о назначении командной строки Windows и о средствах настройки и управления работой командной оболочки, о приемах эффективной работы с командной строкой. В методических указаниях изложены основы сценариев командной строки.
Терминал является фактическим интерфейсом к консоли, который вы можете вводить и выполнять текстовые команды. Вы можете вводить команды после командной строки. Имейте в виду, что вы не можете получить доступ к исходному коду через терминал. Терминал используется для выполнения команд, которые позволяют выполнять определенную задачу.
Теперь, когда вы находитесь, давайте использовать командную строку
Командная строка - это фактическая строка на консоли, где вы вводите команду. Все команды имеют три части: утилиту, флаги и аргументы. Утилита всегда является первой в команде, а флаг и аргумент следуют в зависимости от их правил. Ниже приведен пример команды, которую вы вводите в командной строке.
Методические указания предназначены для студентов факультета ИСТАС по направлению подготовки 230100 «Информатика и вычислительная техника» , изучающих дисциплину «Операционные системы».
1. Средства работы с командной строкой в Windows
Консоль командной строки присутствует во всех версиях операционных систем Windows. Ранние версии ОС поддерживали режим MS-DOS напрямую, что позволяло выполнять простые команды прямо из консоли. Представители же семейства NT, такие как Windows XP, Windows 7 или Windows Server 2008, работают уже совсем по другим принципам, однако MS-DOS в них тоже поддерживается, но через виртуальную машину (NT Virtual DOS Machine, NTVDM), что позволяет контролировать и администрировать системные ресурсы прямо из консоли командного режима.
Когда вы открываете терминал, он обычно открывается в домашний каталог вашего компьютера. Это просто означает, что остальная часть строки является командой, а не предложением. Эта команда изменится с вашего текущего каталога на каталог «Документы». Вы можете сказать, что это сработало, потому что запрос перед «:» должен теперь читать.
`имя_компьютера: Имя пользователя: `. Это должно содержать список всех документов, которые у вас есть в этом текущем каталоге. В окне терминала введите следующую команду. Утилиты также иногда называются командами сами по себе, потому что они указывают общую идею того, что вы хотите. В большинстве случаев вы можете просто запустить утилиту самостоятельно, без каких-либо флагов или аргументов.
Для работы с командной строкой есть встроенный интерпретатор команд , который используется для выполнения вводимых с клавиатуры команд. В технической литературе, посвященной работе с командной строкой, можно встретить другие названия интерпретатора команд, такие как командный интерпретатор, командный процессор, командная строка, командная оболочка .
Большинство команд имеют только одну утилиту. Флаг, который изменяет работу утилиты. Флаги похожи на параметры или предпочтения: утилита обычно отлично работает с настройками по умолчанию, но иногда вы хотите изменить ее работу. Флаги всегда начинаются с одной или двух тире, и они обычно идут между утилитой и аргументами.
Аргументы используются, когда утилита должна точно знать, что вы хотите для определенного действия, и нет четкой настройки по умолчанию. Чтобы отправить команду на компьютер, просто нажмите клавишу ввода. Обучающие команды могут казаться подавляющими, но чем больше вы поправляетесь, тем лучше становитесь.
При стандартной установке командный интерпретатор хр
bazava.ru