如何从文件中获取值并将它们批量保存在数组中?

时间:2018-04-17 17:55:14

标签: arrays file batch-file

我有一个名为 file.txt 的文件,其中包含以下数字:

1 2 3 4 5

我需要一个批处理文件,它从 file.txt 中获取数字并将它们保存在一个数组中。最后,数组应该如下所示:

a[0]=1 a[1]=2 a[2]=3...

谢谢!

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