Вопрос есть ответ. Вы явно с помощью интерпретатора cmd
команды Microsoft, в Windows NT; и в этом интерпретаторе команд setlocal
действительно не действует, когда вызывается из командного сценария.
Другие интерпретаторы команд отличаются в том, что делает setlocal
, в том, может ли он вызываться из командного сценария, в том, является ли он вложенным и контролирует ли он то, что вы пытаетесь контролировать.
Исходный setlocal
в cmd
Microsoft в OS/2 версии 1 только что сохранил текущий диск, каталог и среду; не имел никакого эффекта от командных сценариев; и не гнездился. Как видите, за последнюю четверть века команда была расширена в разных направлениях.
Одна из причин такого различия заключается в том, что TCC от JP Software постепенно расширяет переменные в составных командах и не нуждается в трюке с отложенным расширением переменных, чтобы делать то, что вы пытаетесь сделать. Это:
for /l %i in (1,1,3) do (set text=%i & echo Hello %text%)
... печатает то, что вы хотите напечатать.
дальнейшее чтение
SETLOCAL
. Справочник по командной строке Windows XP A – Z. TechNet. Корпорация Майкрософт.
SETLOCAL
. Возьмите Command / TCC Help. JP Software.
- Джонатан де Бойн Поллард.
SETLOCAL
. Справочник по интерпретатору 32-битных команд.
SETLOCAL
. Справочник по командам OS / 2 Warp. Корпорация IBM.
- Дж. Эммет Бим (1988). Иллюстрированный OS / 2 . Wordware Publishing. ISBN 9781556220531. с. 40