代码之家  ›  专栏  ›  技术社区  ›  Synetech

在命令提示下使用for循环生成一个环境变量set

  •  2
  • Synetech  · 技术社区  · 15 年前

    以下命令提示命令(在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文件中的本地标签, 集合 变量本身加上 % 1 然后跳到 :EOF . 它可以工作,但是我想知道是否有一种方法可以让它在一行中工作,而不需要调用和标签开销。

    2 回复  |  直到 15 年前
        1
  •  3
  •   John Knoeller    15 年前

    这是一个必须启用的选项

    > help for
    

    将解释

    哎呀,我是说

    > help set
    

    一定要一直读到底部

    编辑:原来你可以在一个单独的批处理文件中打开它。 将此文本另存为temp.bat

    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL ENABLEDELAYEDEXPANSION
    set SOMEVAR=
    for %%i IN (temp.*) DO set SOMEVAR=!SOMEVAR! "%%i"
    echo %SOMEVAR%
    
        2
  •  0
  •   ghostdog74    15 年前

    这里有一个等价的替代方法,使用系统中已经存在的vbscript

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

    输出

    C:\test>CScript//nologo test.vbs 一百二十三

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