在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
赋值给var
而set var=string
将执行相同的操作。 几乎。 在第一种情况下,在结束引号之后的任何杂散尾随空格是从赋值中排除的,在第二种情况下它们是INCLUDED。 打印时空格有点难以看清。
ECHO
回响string。 从关键上来说,它后面跟着一个空格 – 批量使用的默认分隔符之一(其他的是TAB,COMMA,SEMICOLON – 其中任何一个都可以,但是TABS经常被文本编辑器转换为空格序列,其他人在过去几年中也出现了自己的怪癖。)在ECHO
的O
之后的其他字符已经被发现正是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%]!