Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件CSV字符串到金字塔_Batch File_For Loop_Dos - Fatal编程技术网

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

Batch file 批处理文件CSV字符串到金字塔,batch-file,for-loop,dos,Batch File,For Loop,Dos,我正在处理一个批处理文件,我有一个特定的要求,其中我有一个字符串“text1、text2、text3、text4…等等”&我希望我的输出像金字塔一样 text1 text1,text2 text1、text2、text3 text1、text2、text3、text4 …等 我的大脑说这是很容易实现的,但没有得到逻辑!如何通过批处理脚本编写(for loop)实现这一点?您可以使用一个变量,在每个循环中,您都会在其上附加一个文本。您还需要激活delayedexpansion,以便快速更新变量fo

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

text1
text1,text2
text1、text2、text3
text1、text2、text3、text4
…等


我的大脑说这是很容易实现的,但没有得到逻辑!如何通过批处理脚本编写(for loop)实现这一点?

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

您可以使用一个变量,在该变量中,您可以在每个循环上附加一个文本。您还需要激活
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
由于值是用逗号分隔的,并且逗号是
for
命令中的默认分隔符,因此只需在处理值时遍历串联值的列表即可


由于值是用逗号分隔的,并且逗号是
for
命令中的默认分隔符,因此只需在处理值时遍历连接值的列表即可。下面的方法允许您拥有逗号分隔的值列表,这些值可能包含空格或批处理特殊字符。当然,它也适用于您的简单值

@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!
)
@echo关闭
setlocal EnableDelayedExpansion
设置“字符串=文本一,文本,文本|三|,文本和四&”
设置“行=”
对于(“%string:,=”,“%”中的%%a,请执行以下操作(
设置“line=!line!%%~a,”
回声!线路:~0,-1!
)
输出:

text one
text one,text <two>
text one,text <two>,text |three|
text one,text <two>,text |three|,text &four&
text-one
文本一,文本
课文一,课文三|
课文一,课文三,课文四&

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

@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!
)
@echo关闭
setlocal EnableDelayedExpansion
设置“字符串=文本一,文本,文本|三|,文本和四&”
设置“行=”
对于(“%string:,=”,“%”中的%%a,请执行以下操作(
设置“line=!line!%%~a,”
回声!线路:~0,-1!
)
输出:

text one
text one,text <two>
text one,text <two>,text |three|
text one,text <two>,text |three|,text &four&
text-one
文本一,文本
课文一,课文三|
课文一,课文三,课文四&

太棒了。它工作得很好。我喜欢你的解决方案,因为它可以处理特殊字符以及。非常感谢!请注意,此方法失败时使用通配符,即,
*
非常棒。它工作得很好。我喜欢你的解决方案,因为它可以处理特殊字符以及。非常感谢!请注意,此方法在使用通配符时失败,即,
*
谢谢@konsolebox,但text1、text2、text3只是示例,我的案例实际上处理的是不同的字符串。尽管如此,这是一个很好的答案,我相信我会在其他地方使用这个逻辑。@ghabu不用担心。欢迎:)谢谢@konsolebox,但text1、text2、text3只是示例,我的案例实际上处理的是不同的字符串。尽管如此,这是一个很好的答案,我相信我会在其他地方使用这个逻辑。@ghabu不用担心。欢迎:)