Попытка установить локальную переменную внутри цикла for в одной строке

Попытка установить локальную переменную внутри цикла for в одной строке

Я не уверен, почему запуск этой команды из командной строки не работает. setlocal можно вызвать только из пакетного файла?

setlocal EnableDelayedExpansion & for /l %i in (1,1,3) do (set text=%i & echo Hello !text!)

Ожидаемый результат:

Привет 1
Привет 2
Привет 3

ОБНОВЛЯТЬ: Я использую Windows 8.1.

решение1

Вопрос — это ответ. Вы явно используете cmdкомандный интерпретатор Microsoft в Windows NT; и в этом командном интерпретаторе setlocalдействительно нет никакого эффекта, если он вызван из командного скрипта.

Другие интерпретаторы команд отличаются тем, что setlocalони делают, могут ли они быть вызваны из командного сценария, являются ли они вложенными и контролируют ли они то, чем вы пытаетесь управлять.

Оригинальный setlocal, в Microsoft cmdв OS/2 версии 1, просто сохранял текущий диск, каталог и среду; не имел никакого эффекта вне командных скриптов; и не был вложенным. Как вы можете видеть, за последнюю четверть века команда была расширена в разных направлениях.

Одной из причин разницы здесь является то, что TCC от JP Software выполняет прогрессивное расширение переменных в составных командах и не нуждается в трюке с отложенным расширением переменных, чтобы сделать то, что вы пытаетесь сделать. Это:

для /l %i в (1,1,3) сделать (установить текст=%i и вывести Привет %text%)
… печатает то, что вы хотите напечатать.

дальнейшее чтение

  • SETLOCAL.Справочник по командной строке Windows XP от A до Z. TechNet. Корпорация Microsoft.
  • SETLOCAL. Принять командование / Помощь TCC. Программное обеспечение JP.
  • Джонатан де Бойн Поллард. SETLOCAL. Справочник команд 32-битного интерпретатора команд.
  • SETLOCAL. Справочник команд OS/2 Warp. Корпорация IBM.
  • Дж. Эмметт Бим (1988).Иллюстрированный OS/2. Wordware Publishing. ISBN 9781556220531. стр. 40

решение2

Ответ оказался довольно простым!

для /l %i в (1,1,3) сделать (вызов set text=%i & echo Привет %text%)

Связанный контент