我有一个名为 file.txt 的文件,其中包含以下数字:
1 2 3 4 5
我需要一个批处理文件,它从 file.txt 中获取数字并将它们保存在一个数组中。最后,数组应该如下所示:
a[0]=1 a[1]=2 a[2]=3...
谢谢!
答案 0 :(得分:1)
这是一种替代解决方案,无需delayed expansion:
@echo off
rem // Read first line of file:
< "file.txt" set /P LINE=""
rem // Initialise index number:
set /A "IDX=0"
rem // Loop through items/numbers from read line:
for %%J in (%LINE%) do (
rem // Assign current array element:
call set "A[%%IDX%%]=%%J"
rem // Increment index number:
set /A "IDX+=1"
)
rem // Return result:
set A[
call
命令通过引入第二个解析阶段来避免延迟扩展,以便读取在同一循环中写入/更改的变量IDX
。
这取决于所有数字都出现在文件的一行中。请注意,该行不得超过1021个字符。
这是另一个,也没有延迟扩张:
@echo off
rem // Initialise index number:
set /A "IDX=0"
rem // Read one line of file:
for /F "usebackq delims=" %%L in ("file.txt") do (
rem // Loop through items/numbers from read line:
for %%K in (%%L) do (
rem // Retrieve current index number:
for /F "tokens=1-2" %%I in ('set /A IDX') do (
rem // Assign current array element:
set "A[%%I]=%%K"
)
rem // Increment index number:
set /A "IDX+=1"
)
)
rem // Return result:
set A[
for /F
命令周围的set /A
循环可以避免延迟扩展。在set /A
上下文(而不是批处理上下文)中执行的cmd
返回(最后)结果。由于它由for /F
执行,因此cmd
上下文适用。 for /F
只捕获输出,即变量IDX
的值。
这接受遍布多行的偶数。请注意,每行不得超过大约8090个字符的长度。
答案 1 :(得分:1)
使用带有字符串替换的SET命令的另一个选项。
@echo off
setlocal EnableDelayedExpansion
set i=0
set /p a=<file.txt
set "a[!i!]=%a: =" & set /A i+=1 & set "a[!i!]=%"
set a[
答案 2 :(得分:0)
如果数字 在同一行 :
你可以做这样的事情:
@echo off
setlocal enabledelayedexpansion
set /p $list=<Your_Text_file.txt
set $count=0
for %%a in (%$list%) do (
set "$array[!$count!]=%%a"
set /a $count+=1
)
set $array