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

时间:2013-09-18 07:19:40

标签: windows batch-file

我想读取一个文本文件并将每一行存储在一个数组中。当我使用下面的代码时,"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]!

4 个答案:

答案 0 :(得分:11)

这是一种有时非常有用的方法:

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

答案 1 :(得分:2)

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

在代码块中,您需要delayed expansion!variables!

答案 2 :(得分:0)

阅读有关环境运行时链接的set /?说明。当您在%i%内使用for时,它会在执行 for之前预先展开。您需要改为使用!i!

答案 3 :(得分: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

没有提供任何行开头“:”