我可以像这样在批处理文件中声明一个列表或数组吗:
set list = "A B C D"
然后我需要将这些写入一个文件,中间有空格:
A
B
C
D
是的,您可以同时使用这两种方式。如果您只想分隔元素并在单独的行中显示它们,则列表更简单:
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
command 中包含的所有字符都插入到变量名(等号左侧)或变量值中。例如,这个命令:
set list = "A B C D"
创建一个名为list
(list-space) 的变量,其值为"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
有时数组元素可能很长,此时可以这样创建数组:
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/
)
@echo off
setlocal
set "list=a b c d"
(
for %%i in (%list%) do (
echo(%%i
echo(
)
)>file.txt
您不需要 - 实际上,不能批量“声明”变量。为变量赋值会创建它,而赋值为空字符串会删除它。任何没有赋值的变量名都有一个空字符串的值。所有变量都是字符串 - 没有例外。有些操作似乎执行(整数)数学函数,但它们是通过从字符串来回转换来操作的。
批处理对变量名称中的空格很敏感,因此您发布的分配会将字符串(包括引号)分配"A B C D"
给变量"list "
- 不包括引号,但包括空格。语法set "var=string"
用于将值分配string
给var
而set var=string
将做同样的事情。几乎。在第一种情况下,结束引号后的任何杂散尾随空格都从分配的值中排除,在第二种情况下,它们被包含。打印时很难看到空格。
ECHO
回显字符串。经典地,它后面是一个空格 - 批处理使用的默认分隔符之一(其他是 TAB、COMMA、分号 - 这些中的任何一个都一样好但是 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
setlocal enabledelayedexpansion
创建列表
set items[0]=First
set items[1]=Second
set items[2]=Third
set items[3]=Fourth
set items[4]=Fifth
从列表中选择
%items[1]%
显示列表中的项目
echo %items[1]%
询问用户选择(列表中的键)并返回相应的项目
set /p choice="Enter choice:
echo !items[%choice%]!
显示列表。括号中的幻数是:0
数组的起始索引。1
步骤。4
最后一项。%%i
是你的索引。
for /L %%i in (0,1,4) do (
echo !items[%%i]!
)
我喜欢这种方式:
set list=a;^
b;^
c;^
d;
for %%a in (%list%) do (
echo %%a
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%]!