Создание переменной среды с помощью 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 или массивы для хранения ваших переменных.