使用批处理脚本逐行读取文本文件并将其存储在数组中

8
我想读取一个文本文件并将每一行存储在一个数组中。当我使用下面的代码时,"echo %i%" 每次都打印0,并且只有 array[0] 的值被赋值了。但是在 "set n=%i%" 中,n 的值被赋为最后递增的 I 值。另外,"@echo !array[%%i]!" 打印的是"!array[0]!",而不是值。代码中是否有语法错误?
set /A i=0

for /F %%a in (C:\Users\Admin\Documents\url.txt) do (

set /A i+=1

echo %i%

set array[%i%]=%%a

)

set n=%i%

for /L %%i in (0,1,%n%) do @echo !array[%%i]!

可能是重复的问题:批处理文件:如何读取文件? - jeb
4个回答

17

这是一个有时候很有用且与你的代码非常相似的方法:

@echo off
set "file=C:\Users\Admin\Documents\url.txt"
set /A i=0

for /F "usebackq delims=" %%a in ("%file%") do (
set /A i+=1
call echo %%i%%
call set array[%%i%%]=%%a
call set n=%%i%%
)

for /L %%i in (1,1,%n%) do call echo %%array[%%i]%%

3
@echo off &setlocal enabledelayedexpansion
for /F "delims=" %%a in (C:\Users\Admin\Documents\url.txt) do (
    set /A count+=1
    set "array[!count!]=%%a"
)
for /L %%i in (1,1,%count%) do echo !array[%%i]!

在代码块中,你需要使用延迟扩展!变量!

0

阅读有关环境运行时链接的 set /? 描述。当您在 for 中使用 %i% 时,它会在 for 执行之前被预先扩展。您需要使用 !i!


谢谢Maximus,我用!i!替换了%i%。现在"echo !i!"打印的是!i!,而"array[!i!]=%%a"则将值分配为array[!i!]。使用"!"时不会应用i的值。 - NagaLakshmi
我觉得你还没有阅读过set /?命令。请仔细阅读关于cmd和/v开关的内容。 - Maximus
@NagaLakshmi - 在批处理文件中,您可以使用setlocal enableDelayedExpansion来实现这一点。 - dbenham

0
@ECHO OFF
SETLOCAL
FOR /f "tokens=1*delims=:" %%i IN ('findstr /n /r "$" url.txt') DO SET max=%%i&SET array[%%i]=%%j
FOR /l %%i IN (1,1,%max%) DO CALL ECHO(%%array[%%i]%%
GOTO :EOF

假设没有任何一行以“:”开头


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