在Windows批处理中创build列表或数组

我可以像这样在一个batch file中声明一个列表或数组:

set list = "ABCD" 

然后我需要把它们写到一个文件中,之间的空格:

 A B CD 

是的,你可以使用两种方式。 如果你只是想分离元素,并用分隔线显示它们,则列表更简单:

 set list=ABCD 

由空格分隔的值列表可以通过命令容易地处理:

 (for %%a in (%list%) do ( echo %%a echo/ )) > theFile.txt 

你也可以这样创build一个数组:

 setlocal EnableDelayedExpansion set n=0 for %%a in (ABCD) do ( set vector[!n!]=%%a set /A n+=1 ) 

并以这种方式显示数组元素:

 (for /L %%i in (0,1,3) do ( echo !vector[%%i]! echo/ )) > theFile.txt 

有关batch file中数组pipe理的更多详细信息,请参阅: cmd.exe(批处理)脚本中的数组,链表和其他数据结构

注意! 您必须知道set命令中包含的所有字符都插入variables名称(等号左边)或variables值中。 例如,这个命令:

 set list = "ABCD" 

创build一个名为list (list-space)的variables,其值为"ABCD" (空格,引号,A等)。 出于这个原因,不要在set命令中插入空格是一个好主意。 如果您需要用引号将值括起来,则必须同时包含variables名称和值:

 set "list=ABCD" 

PS – 你不应该使用ECHO. 为了留空行! 另一种方法是ECHO/ 。 有关这一点的更多详细信息,请参阅: http : //www.dostips.com/forum/viewtopic.php?f=3&t=774

 @echo off setlocal set "list=abcd" ( for %%i in (%list%) do ( echo(%%i echo( ) )>file.txt 

你不需要 – 实际上,不能“批量”声明variables。 赋值给variables创build它,分配一个空string删除它。 任何没有赋值的variables名都有一个空string的值。 所有variables都是string – 无例外。 有一些操作似乎执行(整数)math函数,但它们通过从string来回转换操作。

批处理对variables名称中的空格非常敏感,因此,如果您发布的分配将string"ABCD" (包括引号)分配给variables"list " – 不包括引号,但包括空格。 语法set "var=string"用于将值string赋值给varset var=string将执行相同的操作。 几乎。 在第一种情况下,在结束引号之后的任何杂散尾随空格是从赋值中排除的,在第二种情况下它们是INCLUDED。 打印时空格有点难以看清。

ECHO回响string。 从关键上来说,它后面跟着一个空格 – 批量使用的默认分隔符之一(其他的是TAB,COMMA,SEMICOLON – 其中任何一个都可以,但是TABS经常被文本编辑器转换为空格序列,其他人在过去几年中也出现了自己的怪癖。)在ECHOO之后的其他字符已经被发现正是SPACE所应该做的。 DOT很常见。 开放式括号(可能是自命令以来最有用的

 ECHO.%emptyvalue% 

将产生ECHO状态报告( ECHO is on/off ),而

 ECHO(%emptyvalue% 

会产生一个空行。

ECHO(的问题是ECHO(结果“看起来”不平衡。

有时数组元素可能很长,那么你可以用这种方式创build一个数组:

 set list=a set list=%list%;b set list=%list%;c set list=%list%;d 

然后显示它:

 @echo off for %%a in (%list%) do ( echo %%a echo/ ) 

batch file中没有“数组”types,这有时是一个好处,但有一些解决方法。 这里有一个链接,提供了一些build议,为您自己创build一个类似于批处理中的数组: http : //hypftier.de/en/batch-tricks-arrays 。 至于回显文件“echovariables>>文件path”用于将variables的内容回显到文件,以及“回显”。 (这个时期不是一个错字)起作用或呼应一个换行符。 我认为这两者应该共同努力去完成你所需要的。

 @echo off set array= setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION set nl=^&echo( set array=auto blue ^!nl!^ bycicle green ^!nl!^ buggy red echo convert the String in indexed arrays set /a index=0 for /F "tokens=1,2,3*" %%a in ( 'echo(!array!' ) do ( echo(vehicle[!index!]=%%a color[!index!]=%%b set vehicle[!index!]=%%a set color[!index!]=%%b set /a index=!index!+1 ) echo use the arrays echo(%vehicle[1]% %color[1]% echo oder set index=1 echo(!vehicle[%index%]! !color[%index%]!