批处理文件CSV字符串到金字塔

时间:2014-07-22 11:52:15

标签: batch-file for-loop dos

我正在处理其中一个批处理文件,我有一个特定的要求,我有一个字符串" text1,text2,text3,text4 ... etc" &我希望我的输出像金字塔一样

text1
text1,text2
text1,text2,text3
text1,text2,text3,text4
..等

我的大脑说它很容易实现,但没有得到逻辑!我怎么能通过批处理脚本(for循环)来做到这一点?

3 个答案:

答案 0 :(得分:2)

@echo off
    setlocal enableextensions enabledelayedexpansion

    set "text=text1,text2,text3,text4,text5,text6,text7,text8"
    set "output="

    for %%a in (%text%) do (
        if defined output ( set "output=!output!,%%a" ) else set "output=%%a"
        echo(!output!
    )

由于值以逗号分隔,并且逗号是for命令中的默认分隔符,因此只需迭代列表,在处理这些值时将其连接起来

答案 1 :(得分:2)

下面的方法允许您获得可能包含空格或批处理特殊字符的逗号分隔值列表。当然,它也适用于您的简单值。

@echo off
setlocal EnableDelayedExpansion

set "string=text one,text <two>,text |three|,text &four&"
set "line="
for %%a in ("%string:,=","%") do (
   set "line=!line!%%~a,"
   echo !line:~0,-1!
)

输出:

text one
text one,text <two>
text one,text <two>,text |three|
text one,text <two>,text |three|,text &four&

答案 2 :(得分:1)

您可以使用一个变量,在每个循环中,您都可以在其上附加文本。您还需要激活delayedexpansion,以便快速更新变量。 for /l %%a in (;;)创建了一个无限循环。

@echo off
setlocal enabledelayedexpansion
set var=text1
for /l %%a in (;;) do (
    echo !var!
    set var=!var!,text1
)

编辑:注意到您的数字实际增加了。你可以这样做:

@echo off
setlocal enabledelayedexpansion
set var=text1
for /l %%a in (2,1,100) do (
    echo !var!
    set var=!var!,text%%a
)
  • 2 = %%a
  • 的初始值
  • 1 =每个循环增量
  • 100 =最大数量,但仅限于条件。打印的最大数量为100 - 1或99。