我想读取一个文本文件并将每一行存储在一个数组中。当我使用下面的代码时,"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]!
答案 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
没有提供任何行开头“:”