1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetLocal и расширенная обработка команд в Windows Batch [Статья]10.05.2013, 21:38. Показов 76996. Ответов 4
Метки нет (Все метки)
SetLocal и расширенная обработка команд
Часто встречали такую конструкцию ?
Что делает? SetLocal - означает, что все переменные, объявленные внутри Batch-файла, будут локальными и после выхода из него обнуляться. Это также оберегает от случаев, когда Вы забываете задавать начальное значение переменной. По-умолчанию, значение переменной при инициализации для строкового типа = пустой строке, для числового типа = 0. Типы переменных. Если Вы запускаете Batch-файл - из CMD.exe (ПУСК -> Выполнить -> CMD -> {Enter}) - один Batch-файл из другого то при повторном запуске без команды SetLocal в переменных останутся старые значения. Область видимости переменной, заданной командой Set, является текущая среда интерпретатора, если батник запущен через нее (CMD.exe) (и внутри нет команды локализации SetLocal), или сессия самого батника, если двойным кликом по нему. Как задается?
EndLocal и знак & (амперсанд)*
Конструкция вида:
переменная раскрываемая через % и все еще будет содержать старое значение, поэтому может быть "переброшена" через локаль. В конструкции вида:
поэтому способ "переброса" значения через локаль невозможно использовать внутри циклов. Extensions - режим расширенной обработки команд. Что делает? Позволяет использовать дополнительные ключи встроенных команд. Где используется? Откройте справку по командам, например, For /? Set /? Там в первых 10 строках найдете выражение: "Если включена расширенная обработка команд... то можно использовать еще и такие ключи..." chdir /? "Если включена расширенная обработка команд... в таком случае поведение команды изменяется" (касается пробелов в пути). ... Как включается? 1) Задается командой
Но может быть выключена принудительно через реестр, а также по-умолчанию, выключена в некоторых старых ОС. http://technet.microsoft.com/e... 59665.aspx Перенаправить поток ошибок программы в переменную Поэтому, ее желательно включать во все скрипты. 2) Через реестр (выше по ссылкам). 3) Через ключи CMD.exe, если бат-файл или команда запускается через него, а не напрямую. Метод может использоваться в однострочных командах, а также методах Shell других ЯП. Пример:
Может быть отключена командой:
DelayedExpansion - режим отложенного расширения переменных среды. Что делает? EnableDelayedExpansion - означает возможность использовать восклицательные знаки (!variable!) для раскрытия значения переменной.
Сообщение от Elroir
"Раскрывается" - означает, что мы получаем значение, которое хранит переменная. Пример:
Если Вы измените значение переменной внутри конструкции, раскрывая переменную через %, Вы получите ее старое значение (присвоенное до входа в эту конструкцию). Новое (актуальное) значение переменной можно получить:
Как включить возможность использовать (!): По-умолчанию, данный режим выключен. Включить можно: 1) командой:
http://technet.microsoft.com/e... 57361.aspx 3) запуском batch-файла или команд(ы) через специальный ключ CMD.exe: Пример:
Почему бы всегда не использовать этот метод вместо % ?
1) раскрытие переменной через % быстрее, чем через ! Оптимизация кода 2) при чтении данных из файла, в содержимом которого есть знаки ! и последующей записью или выводом на экран этой информации знаки ! "глотаются". Поэтому еще иногда используется команда отключения данного режима:
Примеры практического использования:
1) Цикл:
Ремарка: Принцип раскрытия переменных влияет также на изменяемые глобальные переменные, например, time и date, которые постоянно обновляются и отображают дату и время. После входа в конструкцию эти переменные "замораживаются". Чтобы получить актуальную дату/время необходимо раскрытие через знаки (!):
11
|
10.05.2013, 21:38 | |
Ответы с готовыми решениями:
4
Батник переименования файлов и "SetLocal и расширенная обработка команд" Можно ли организовать выполнение команд Telnet с использованием VBS и Batch? Windows 7 Домашняя расширенная windows 7 домашняя расширенная, ошибки |
17.02.2016, 20:04 [ТС] | 2 |
1
|
18.10.2017, 14:17 [ТС] | 3 |
0
|
5 / 5 / 0
Регистрация: 24.11.2014
Сообщений: 47
|
|
04.12.2023, 18:39 | 4 |
Что-то я запутался с EnableDelayedExpansion. При использовании SetLocal EnableDelayedExpansion как лучше выключить DelayedExpansion? Обычно, просто используют EndLocal. Но, тогда зачем имеется конструкция SetLocal DisableDelayedExpansion? И ещё, команда EndLocal DisableDelayedExpansion (или EndLocal EnableDelayedExpansion) не вызывает ошибок, хотя в документации о ней не сказано (как в справке самой команды, так и на сайте M$). Как это, вообще, понимать?
0
|
04.12.2023, 18:51 [ТС] | 5 |
Andrey_Vladi-ch, запустите и увидите разницу:
Код
@echo off set i=1 SetLocal EnableDelayedExpansion set i=2 SetLocal DisableDelayedExpansion echo i=%i% EndLocal EndLocal echo i=%i% pause Такого параметра нет. Вы можете напечатать рядом с EndLocal что угодно. У нее просто отсутствует проверка аргумента.
1
|
04.12.2023, 18:51 | |
04.12.2023, 18:51 | |
Помогаю со студенческими работами здесь
5
Активация windows 7 домашняя расширенная Windows 7 домашняя расширенная не подключается к инету? [Статья] Windows 10 Creators Update: что нового в Bash/WSL и Windows Console Где можно скачать MSDN образ версии ОС Windows Домашняя Расширенная? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи | |||||
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
|
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций
История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
|
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
|
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы
В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
|
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
|
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
|
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
|
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
|
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
|
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
|
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
|
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
|