|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetLocal и расширенная обработка команд в Windows Batch [Статья]10.05.2013, 21:38. Показов 81954. Ответов 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!) для раскрытия значения переменной.
"Раскрывается" - означает, что мы получаем значение, которое хранит переменная. Пример:
Если Вы измените значение переменной внутри конструкции, раскрывая переменную через %, Вы получите ее старое значение (присвоенное до входа в эту конструкцию). Новое (актуальное) значение переменной можно получить:
Как включить возможность использовать (!): По-умолчанию, данный режим выключен. Включить можно: 1) командой:
http://technet.microsoft.com/e... 57361.aspx 3) запуском batch-файла или команд(ы) через специальный ключ CMD.exe: Пример:
Почему бы всегда не использовать этот метод вместо % ?
1) раскрытие переменной через % быстрее, чем через ! Оптимизация кода 2) при чтении данных из файла, в содержимом которого есть знаки ! и последующей записью или выводом на экран этой информации знаки ! "глотаются". Поэтому еще иногда используется команда отключения данного режима:
Примеры практического использования:
1) Цикл:
Ремарка: Принцип раскрытия переменных влияет также на изменяемые глобальные переменные, например, time и date, которые постоянно обновляются и отображают дату и время. После входа в конструкцию эти переменные "замораживаются". Чтобы получить актуальную дату/время необходимо раскрытие через знаки (!):
11
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 10.05.2013, 21:38 | |
|
Ответы с готовыми решениями:
4
Windows 7 Домашняя расширенная |
|
|
|
| 17.02.2016, 20:04 [ТС] | |
|
1
|
|
|
|
|
| 18.10.2017, 14:17 [ТС] | |
|
0
|
|
|
5 / 5 / 0
Регистрация: 24.11.2014
Сообщений: 51
|
|
| 04.12.2023, 18:39 | |
|
Что-то я запутался с EnableDelayedExpansion. При использовании SetLocal EnableDelayedExpansion как лучше выключить DelayedExpansion? Обычно, просто используют EndLocal. Но, тогда зачем имеется конструкция SetLocal DisableDelayedExpansion? И ещё, команда EndLocal DisableDelayedExpansion (или EndLocal EnableDelayedExpansion) не вызывает ошибок, хотя в документации о ней не сказано (как в справке самой команды, так и на сайте M$). Как это, вообще, понимать?
0
|
|
|
|
|||||||
| 04.12.2023, 18:51 [ТС] | |||||||
|
Andrey_Vladi-ch, запустите и увидите разницу:
1
|
|||||||
| 04.12.2023, 18:51 | |
|
Помогаю со студенческими работами здесь
5
windows 7 домашняя расширенная, ошибки Активация windows 7 домашняя расширенная Windows 7 домашняя расширенная не подключается к инету? [Статья] Windows 10 Creators Update: что нового в Bash/WSL и Windows Console Где можно скачать MSDN образ версии ОС Windows Домашняя Расширенная? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|