Создание переменной среды с помощью SET с использованием цикла FOR в командной строке

У меня проблемы со следующими командами командной строки (в Windows XP).

    set SOMEVAR=
    for /F %i in (1 2 3) do set SOMEVAR=%SOMEVAR% "%i"
    echo %SOMEVAR%

Я ожидаю, что он создаст переменную SOMEVAR так, чтобы она содержала каждый элемент цикла for в кавычках, разделенных пробелом: 1 2 3

Однако, что это то, что я получаю вместо этого.

  >    set SOMEVAR=
  >    for /F %i in (1 2 3) do set SOMEVAR=%SOMEVAR% "%i"
  >set SOMEVAR=%SOMEVAR% "1"
  >set SOMEVAR=%SOMEVAR% "2"
  >set SOMEVAR=%SOMEVAR% "3"
  >    echo %SOMEVAR%
  %SOMEVAR% "3"

Похоже, что переменные окружения не обновляются и / или не раскрываются во время цикла FOR.

Любые идеи, как построить переменную среды с цикломFOR?

Обходной путь, который я в настоящее время использую, заключается в том, чтобы цикл FOR вызывал локальную метку в файле BAT, которая устанавливает переменную себе + % 1, а затем переходит к : EOF. Это работает, но я хотел бы выяснить, есть ли способ заставить его работать в одну строку без затрат на вызов и метку.

2 ответа

Решение

Это опция, которую вы должны включить

> help for

объясню

упс я имел ввиду

> help set

обязательно прочитайте весь путь до дна

Редактировать: получается, что вы можете включить это в отдельном пакетном файле. сохранить этот текст как temp.bat

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
set SOMEVAR=
for %%i IN (temp.*) DO set SOMEVAR=!SOMEVAR! "%%i"
echo %SOMEVAR%

Вот эквивалентная альтернатива, используя vbscript, который уже находится в вашей системе

somevar=""
For i=1 To 3 
    somevar=somevar & i
Next
WScript.Echo somevar

выход

C:\test>cscript //nologo test.vbs 123

Кроме того, если вы собираетесь использовать многие из этих вещей, вы можете использовать словарный набор vbscript или массивы для хранения ваших переменных.

Другие вопросы по тегам