7

我想读取一个文本文件并将每一行存储在一个数组中。当我使用下面的代码时,每次"echo %i%"都打印并且只分配值。但是在 中,值被分配为最后一个递增的 I值。也像打印而不是打印值。代码中是否有任何语法错误?0array[0]"set n=%i%"n"@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

4 回答 4

14

这是一种有时很有用且与您的代码非常相似的方法:

@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]%%
于 2013-09-18T10:37:38.643 回答
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!.

于 2013-09-18T08:35:01.500 回答
0

阅读set /?有关环境运行时链接的说明。当您在%i%内部使用时 - 它在执行前for被预先扩展。你需要改用。 for!i!

于 2013-09-18T07:37:28.050 回答
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

前提是没有行以“:”开头

于 2013-09-18T08:54:22.987 回答