Создание переменной среды с помощью SET с использованием цикла FOR в командной строке
-
21-09-2019 - |
Вопрос
У меня возникли проблемы со следующими командами командной строки (в Windows XP).
set SOMEVAR=
for /F %i in (1 2 3) do set SOMEVAR=%SOMEVAR% "%i"
echo %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.
Любые идеи о том, как создать переменную среды с помощью ДЛЯ петля?
Обходной путь, который я сейчас использую, заключается в том, чтобы ДЛЯ цикл вызывает локальную метку в BAT-файле, которая НАБОРs переменная сама себе плюс %1, затем переходит к :EOF.Это работает, но я хотел бы выяснить, есть ли способ заставить его работать в одной строке без накладных расходов на вызовы и метки.
Решение
это опция, которую вам нужно включить
> 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 для хранения своих переменных.