【问题标题】:Batch file CSV string to pyramid批处理文件 CSV 字符串到金字塔
【发布时间】:2023-03-24 01:30:01
【问题描述】:

我正在处理其中一个批处理文件,并且我有一个特定要求,我有一个字符串 "text1,text2,text3,text4...etc" 并且我想拥有我的输出为像

这样的金字塔

文本1
文本1,文本2
文本1,文本2,文本3
文本 1、文本 2、文本 3、文本 4
..等

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

【问题讨论】:

    标签: batch-file for-loop dos


    【解决方案1】:

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

    @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】:
    @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 命令中的默认分隔符,因此只需在处理这些值时迭代连​​接这些值的列表

    【讨论】:

      【解决方案3】:

      您可以使用一个变量,在每个循环中,您都将在其上附加一个文本。您还需要激活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。

      【讨论】:

      • 感谢@konsolebox,但 text1,text2,text3 只是示例,我的案例实际上是在处理不同的字符串。尽管如此,这是一个很好的答案,我相信我会在其他地方使用这个逻辑。
      • @ghabu 不用担心。欢迎:)
      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多