Создание переменной среды с помощью SET с использованием цикла FOR в командной строке - PullRequest
2 голосов
/ 23 декабря 2009

У меня проблемы со следующими командами командной строки (в 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, которая SET присваивает переменной себе плюс % 1 , затем переходит к : EOF . Это работает, но я хотел бы выяснить, есть ли способ заставить его работать в одну строку без затрат на вызов и метку.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

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

> help for

объяснит

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

> help set

обязательно прочитайте до конца

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

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
set SOMEVAR=
for %%i IN (temp.*) DO set SOMEVAR=!SOMEVAR! "%%i"
echo %SOMEVAR%
0 голосов
/ 23 декабря 2009

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

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

выход

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...