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

StackOverflow https://stackoverflow.com/questions/1950851

Вопрос

У меня возникли проблемы со следующими командами командной строки (в 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 для хранения своих переменных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top