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

我想读取一个文本文件,并将每一行存储在一个数组中。当我使用下面的代码时,“echo%i%”每次打印0,只有数组[0]值被分配。但是在“set n = %i%“,n值被赋值为最后一个增加的i值。”@echo!array [%% i]!“ 正在打印像!array [0]! 而不是打印value.Is在代码中有任何语法错误?

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

Solutions Collecting From Web of "逐行读取文本文件并使用批处理脚本将其存储在数组中"

这里有一个有用的方法,非常类似于你的代码:

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

阅读set /? 关于环境运行时链接的描述。 当你在里面使用%i% for它会执行被预先展开。 你需要使用!i! 代替。

 @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 

只要不开始行“:”