如何在批处理文件中从txt文件创建一个数组?

3

我有一个包含以下数据的txt文件

aaaa 1000 2000
bbb  3000 4000
cccc 5000 
ddd  6000 7000 8000 

这个文件中的行数是不固定的。
我需要将每一行的第一个令牌存储到数组中并打印出每个元素。

1
一个Windows/DOS批处理文件能否使用数组?我的意思是,我想PowerShell脚本可以做到,但CMD呢? - cHao
@cHao 以下链接提供了一些关于批处理文件中数组的提示,但我无法完全理解它们。 [http://jakash3.wordpress.com/2009/12/18/arrays-in-batch/] [http://www.robvanderwoude.com/battech_array.php] - NewQueries
1
我不明白为什么有人认为cHao上面的评论是一条好评论;它只是显示了他对CMD批处理能力的无知!;) - Aacini
@Aacini: “Capabilities” 这个词有点意味着不需要跳过半打的环节才能用一行代码完成任何一个值得尊敬的编程语言所能做到的事情。 :) - cHao
@cHao:请再次阅读我的评论。我并没有批评你的帖子,也没有为Batch辩护。我说你的第一条评论是对Batch的纯粹和简单的负面意见(上面的第二条评论也完全相同),我只是表达了我的惊讶,即任何人都可以认为是一个伟大的评论!也许你可以解释一下为什么负面评论值得“伟大的评论”这个称号,这样我就可以开始在PHP(我不懂)上发表负面评论了! - Aacini
@Aacini:这不是负面意见或负面评论。至少,它不像你的回复那样消极。 :) 这是一个有效的问题(当时我不确定是否可以),可能也是其他人所拥有的问题。 - cHao
3个回答

13

创建数组的方法:

setlocal EnableDelayedExpansion

set i=0
for /F %%a in (theFile.txt) do (
   set /A i+=1
   set array[!i!]=%%a
)
set n=%i%

打印数组元素:

for /L %%i in (1,1,%n%) do echo !array[%%i]!
如果您想将数组名称和长度作为子程序参数传递,请使用以下方法:
call theSub array %n%

:theSub arrayName arrayLen
for /L %%i in (1,1,%2) do echo !%1[%%i]!
exit /B

谢谢@Aacini,我会在我的程序中尝试这个! - NewQueries

2

试试这个:

@echo off
for /F "tokens=1,2*" %%x in  (myFile.txt) do echo %%x

双倍的%在批处理文件中是必需的,但你可以在命令行上使用单个%进行测试。

简而言之,for将遍历myFile.txt,使用默认分隔符(空格)将每一行分为两个标记。


谢谢@akf,但我需要创建一个数组并将其传递到另一个子程序中,在那里我可以单独获取每个元素。 - NewQueries

0

尝试这个,可以从任何地方调用它

@echo off

for /f "usebackq" %%a in ('%2') do set d=%%~a
for /f "usebackq tokens=* delims=%d%" %%G in ('%3')  do set %1=%%~G

set /a i=-1


for %%h in (!%1!) do (
set /a i+=1
set %1[!i!]=%%h
)

3
虽然这可能是一个答案,但它似乎与其他旧答案非常相似。当回答一个已有被接受的答案的老问题时,您需要添加显著的额外新信息,并解释为什么您的新答案是有用的。 - AdrianHHH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接