创建列表或数组并在Windows批处理中打印每个项目

ar5n3qh5  于 2023-04-22  发布在  Windows
关注(0)|答案(7)|浏览(162)

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

set list = "A B C D"

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

A

B

C 

D
pcrecxhr

pcrecxhr1#

是的,你可以使用两种方式。如果你只是想把元素分开,并在单独的行中显示它们,列表更简单:

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(list-space)的变量,其值为"A B C D"(space,quote,A,etc)。因此,最好不要在set命令中插入空格。如果需要将值括在引号中,则必须将变量名和值都括起来:

set "list=A B C D"

PS -你不应该使用ECHO.来留下空行!一个替代方案是ECHO/。关于这一点的更多细节,请参阅:http://www.dostips.com/forum/viewtopic.php?f=3&t=774

gt0wga4j

gt0wga4j2#

有时候数组元素可能很长,这时你可以这样创建一个数组:

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/
)
r55awzrz

r55awzrz3#

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

你不需要-实际上,不能在批处理中“声明”变量。给变量赋值会创建它,而赋值一个空字符串会删除它。任何没有赋值的变量名都有一个空字符串的值。所有变量都是字符串-无一例外。有一些操作看起来像是执行(整数)数学函数,但它们的操作是从字符串来回转换的。
Batch对变量名中的空格很敏感,所以你的赋值会将字符串"A B C D"(包括引号)赋值给变量"list "(不包括引号,但包括空格)。语法set "var=string"用于将值string赋值给var,而set var=string将做同样的事情。几乎。在第一种情况下,结束引号后的任何尾随空格都将从赋值中排除,第二个是包含。2打印时,空格有点难以看到。
ECHO回显字符串。典型地,它后跟一个空格-批处理使用的默认分隔符之一(其他的是TAB、COMMA、分号--任何一个都可以,但是标签经常被文本编辑器转换成空格序列,其他的也在这些年里发展出了自己的怪癖。)ECHOO后面的其他字符被发现可以精确地执行文档中的SPACE应该执行的操作。DOT很常见。开括号(可能是最有用的,因为命令

ECHO.%emptyvalue%

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

ECHO(%emptyvalue%

将生成一个空行。
ECHO(的问题是结果“看起来”不平衡。

6qfn3psc

6qfn3psc4#

数组类型不存在

在批处理文件中没有“数组”类型,这有时是一个优点,有时也是一个缺点,但有一些变通方法。
这里有一个链接,提供了一些为自己创建类似于批处理中的数组的系统的建议:http://hypftier.de/en/batch-tricks-arrays

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

我认为这两个人应该一起工作来完成你所需要的。

延伸阅读

  • 要深入解释为什么“elem[1]”看起来只像一个数组,请看这个SO答案:cmd.exe(批处理)脚本中的数组、链表和其他数据结构
d6kp6zgx

d6kp6zgx5#

我喜欢这样:

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

for %%a in (%list%) do ( 
 echo %%a
 echo/
)
5rgfhyps

5rgfhyps6#

设置环境

@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]!
)
bqf10yzr

bqf10yzr7#

@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%]!

相关问题