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

use*_*789 63 windows batch-file

我可以在批处理文件中声明一个列表或数组,如下所示:

set list = "A B C D"
Run Code Online (Sandbox Code Playgroud)

然后我需要将这些写入文件,其间的空格为:

A

B

C 

D
Run Code Online (Sandbox Code Playgroud)

Aac*_*ini 104

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

set list=A B C D
Run Code Online (Sandbox Code Playgroud)

按空格分隔的值列表可以通过for命令轻松处理:

(for %%a in (%list%) do (
   echo %%a
   echo/
)) > theFile.txt
Run Code Online (Sandbox Code Playgroud)

您也可以这样创建一个数组:

setlocal EnableDelayedExpansion
set n=0
for %%a in (A B C D) do (
   set vector[!n!]=%%a
   set /A n+=1
)
Run Code Online (Sandbox Code Playgroud)

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

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

有关批处理文件中阵列管理的更多详细信息,请参阅cmd.exe(批处理)脚本中的数组,链接列表和其他数据结构

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

set list = "A B C D"
Run Code Online (Sandbox Code Playgroud)

创建一个名为list(list-space)的变量,其值为"A B C D"(space,quote,A等).因此,永远不要在set命令中插入空格.如果需要将值括在引号中,则必须同时包含变量名称及其值:

set "list=A B C D"
Run Code Online (Sandbox Code Playgroud)

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

  • 并且,如果您对(0,1,%n%)中的/ L %% i使用`,则应该全部使用它们,而不仅仅是前3个。:) (2认同)

Mag*_*goo 16

@echo off
setlocal
set "list=a b c d"
(
 for %%i in (%list%) do (
  echo(%%i
  echo(
 )
)>file.txt
Run Code Online (Sandbox Code Playgroud)

您不需要 - 实际上,不能批量"声明"变量.为变量赋值会创建它,并且分配空字符串会删除它.任何没有指定值的变量名称都是空字符串的值.所有变量都是字符串 - 没有例外.ARE操作似乎执行(整数)数学函数,但它们通过从字符串来回转换来操作.

批处理对变量名中的空格很敏感,因此作为已发布的赋值会将字符串"A B C D"(包括引号)分配给变量"list "- 不包括引号,但包括空格.语法set "var=string"用于将值赋给string,varset var=string将执行相同的操作.几乎.在第一种情况下,结束报价后的任何杂散尾随空格都是从分配的值中排除的,在第二种情况下,它们是包含的.打印时,空间有点难以看清.

ECHO回声串.在Clasically,它后面是一个空格 - 批处理使用的默认分隔符之一(其他是TAB,COMMA,SEMICOLON - 其中任何一个都做得很好但是TABS经常被文本编辑器转换为空间序列和别人已经长大自己的怪癖多年了.)下面的其它字符OECHO已发现恰恰是记录空间应该做的事情.DOT很常见.(自命令以来,开括号可能是最有用的

ECHO.%emptyvalue%
Run Code Online (Sandbox Code Playgroud)

将产生ECHO州(ECHO is on/off)的报告

ECHO(%emptyvalue%
Run Code Online (Sandbox Code Playgroud)

会产生一条空行.

问题ECHO(是结果"看起来"不平衡.


Joh*_*Zhu 12

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

set list=a
set list=%list%;b 
set list=%list%;c 
set list=%list%;d
Run Code Online (Sandbox Code Playgroud)

然后显示它:

@echo off
for %%a in (%list%) do ( 
 echo %%a
 echo/
)
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是真正正确的 awser。这确实是我一直在寻找的,似乎是最接近其他语言的,因此是我期望看到的.. Thx (2认同)

小智 5

数组类型不存在

批处理文件中没有“数组”类型,这有时既有利又不利,但有解决方法。

以下链接提供了一些建议,帮助您自己创建类似于批量数组的系统: http: //hypftier.de/en/batch-tricks-arrays

  • 至于回显到文件的echo variable >> filepath作用是将变量的内容回显到文件,
  • 并且echo.(句点不是拼写错误)用于回显换行符。

我认为这两者应该共同努力来完成你所需要的。

进一步阅读


use*_*121 5

我喜欢这样:

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


for %%a in (%list%) do ( 
 echo %%a
 echo/
)
Run Code Online (Sandbox Code Playgroud)