89

我可以像这样在批处理文件中声明一个列表或数组吗:

set list = "A B C D"

然后我需要将这些写入一个文件,中间有空格:

A

B

C 

D
4

7 回答 7

132

是的,您可以同时使用这两种方式。如果您只想分隔元素并在单独的行中显示它们,则列表更简单:

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(批处理)脚本中的数组、链表和其他数据结构

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

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

于 2013-07-12T01:55:43.180 回答
44

有时数组元素可能很长,此时可以这样创建数组:

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/
)
于 2016-12-23T01:48:39.010 回答
22
@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"用于将值分配stringvarset var=string将做同样的事情。几乎。在第一种情况下,结束引号后的任何杂散尾随空格都从分配的值中排除,在第二种情况下,它们被包含。打印时很难看到空格。

ECHO回显字符串。经典地,它后面是一个空格 - 批处理使用的默认分隔符之一(其他是 TAB、COMMA、分号 - 这些中的任何一个都一样好但是 TABS 通常会被文本编辑器转换为空格序列和多年来,其他人已经形成了自己的怪癖。)已发现其他字符在Oin之后ECHO所做的正是记录在案的 SPACE 应该做的事情。DOT 很常见。开括号(可能是最有用的,因为命令

ECHO.%emptyvalue%

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

ECHO(%emptyvalue%

将产生一个空行。

问题ECHO(在于结果“看起来”不平衡。

于 2013-07-12T01:43:07.353 回答
5

数组类型不存在

批处理文件中没有“数组”类型,这有时既有利也有弊,但有一些变通方法。

这是一个链接,它提供了一些建议,用于为自己创建一个类似于批量数组的系统:http: //hypftier.de/en/batch-tricks-arrays

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

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

进一步阅读

于 2013-07-12T00:47:44.950 回答
1

设置环境

@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]!
)
于 2021-03-03T20:22:16.200 回答
1

我喜欢这种方式:

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


for %%a in (%list%) do ( 
 echo %%a
 echo/
)
于 2021-02-10T15:07:21.700 回答
-1
@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%]!
于 2016-11-02T11:35:40.360 回答