使用命令提示符中的FOR循环使用SET构建环境变量

时间:2009-12-23 05:27:19

标签: for-loop environment-variables command-prompt setenv string-building

我在使用以下命令提示符命令时遇到问题(在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 个答案:

答案 0 :(得分:3)

您必须启用

选项
> help for

将解释

哎呀,我的意思是

> help set

一定要一直读到底部

编辑:事实证明,您可以在单个批处理文件中启用此功能。 将此文本另存为temp.bat

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

答案 1 :(得分:0)

这是一个等效的选择,使用已经在你的系统上的vbscript

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

输出

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

另外,如果您要使用大量这些东西,可以使用vbscript的字典集合或数组来存储变量。