我可以像这样在批处理文件中声明列表或数组:
set list = "A B C D"
然后我需要将它们写到文件中,并在它们之间留有空格:
A
B
C
D
Answers:
是的,您可以同时使用两种方式。如果您只想分隔元素并以分隔线显示它们,则列表会更简单:
set list=A B C D
用空格分隔的值列表可以通过以下for
命令轻松处理:
(for %%a in (%list%) do (
echo %%a
echo/
)) > theFile.txt
您也可以通过以下方式创建数组:
setlocal EnableDelayedExpansion
set n=0
for %%a in (A B C D) do (
set vector[!n!]=%%a
set /A n+=1
)
并以这种方式显示数组元素:
(for /L %%i in (0,1,3) do (
echo !vector[%%i]!
echo/
)) > theFile.txt
有关批处理文件中阵列管理的更多详细信息,请参阅:cmd.exe(批处理)脚本中的阵列,链接列表和其他数据结构
注意!您必须知道set
命令中包含的所有字符都已插入变量名称(等号左侧)或变量值中。例如,此命令:
set list = "A B C D"
创建一个list
具有值"A B C D"
(空格,引号,A等)的变量(列表空间)。因此,最好不要在set
命令中插入空格。如果需要将值用引号引起来,则必须将变量名及其值都包括在内:
set "list=A B C D"
PS-请勿使用ECHO.
以留空行!另一种选择是ECHO/
。有关此点的更多详细信息,请参见:http : //www.dostips.com/forum/viewtopic.php?f=3&t=774
for /L %%i in (0,1,%n%)
它,应该把它们全部都得到,而不仅仅是前
set /A n-=1
在第二个命令之前执行命令for
。因此,最好将数组创建为base-1(从1到n,而不是从0到n-1)。
@echo off
setlocal
set "list=a b c d"
(
for %%i in (%list%) do (
echo(%%i
echo(
)
)>file.txt
您不需要-实际上,不能批量“声明”变量。给变量赋值会创建它,而给一个空字符串赋值会删除它。没有赋值的任何变量名都具有空字符串的值。所有变量都是字符串-没有异常。ARE操作似乎执行(整数)数学功能,但是它们通过从字符串来回转换来进行操作。
批处理对变量名称中的空格敏感,因此发布的分配会将字符串"A B C D"
(包括引号)分配给变量"list "
-不包括引号,但包括空格。该语法set "var=string"
用于将值分配给string
,var
而set var=string
将执行相同的操作。几乎。在第一种情况下,在结束引号之后的任何结尾的空格均从分配的值中排除,在第二种情况下,将其包括在内。打印时很难看到空格。
ECHO
回显字符串。通常,它后面跟一个空格-批处理使用的默认分隔符之一(其他分隔符是TAB,COMMA和SEMICOLON-这些分隔符中的任何一个都一样,但是文本编辑器通常会将TABS转换为空格,这些年来,其他字符也变得越来越怪异。)已发现跟随O
in的其他字符ECHO
确实可以完成所记录的SPACE应该执行的操作。DOT很常见。(
自命令以来,左括号可能是最有用的
ECHO.%emptyvalue%
将产生ECHO
状态(ECHO is on/off
)的报告,而
ECHO(%emptyvalue%
将产生一个空行。
问题ECHO(
在于结果“看起来”不平衡。
批处理文件中没有“数组”类型,有时既有好处也有缺点,但是有解决方法。
这是一个链接,提供了一些有关为自己创建类似于批处理阵列的系统的建议:http : //hypftier.de/en/batch-tricks-arrays。
echo variable >> filepath
是为了将变量内容回显到文件,echo.
(句号不是错字)可用于回声换行符。我认为这两个应该一起完成您所需要的。
@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%]!