批处理文件从文件读取到数组变量

时间:2014-09-13 11:00:38

标签: batch-file

我在文本文件(names.txt)中有一个列表,如下所示:

这是documment no ....... etc

发送时间:2013年4月20日

.............等的详细信息

Num:1

姓名:John

姓:白色

出生:1993年9月17日

Num:2

姓名:彼得

姓氏:Tosh

出生:1991年9月14日

............. .............

这个文件不能............

@echo off 

setlocal enabledelayedexpansion

for /F "delims=" %%a in (C:\tmp\names.txt) do (
    set /A count1+=1
    set "array!count1!=%%a"
)
set /A count1-=1

set /A count2=1
set /A count3=2

for /L %%i in (4,4,%count1%) do (
    set /A count2+=4
    set /A count3+=4
    echo !array%%i!  !array%count2%!  !array%count3%!
)

我想将它们列为

Num:1姓名:John姓:白

Num:2姓名:Peter姓:Tosh

Num:3姓名:我姓:我自己

..............

一行中只有3个数据但不起作用。我做错了什么?

3 个答案:

答案 0 :(得分:1)

下面的批处理文件解决了所述的问题;它不需要任何数组:

@echo off
setlocal EnableDelayedExpansion

set "Surname="
for /F "tokens=1,2 delims=: " %%a in (C:\tmp\names.txt) do (
   set "%%a=%%b"
   if defined Surname (
      echo Num : !Num! Name : !Name! Surname : !Surname!
      set "Surname="
   )
)

输出:

Num : 1 Name : John Surname : White
Num : 2 Name : Peter Surname : Tosh

答案 1 :(得分:0)

测试它以查看它是否符合您的要求:

@echo off 
for /F "usebackq delims=" %%a in ("C:\tmp\names.txt") do (
  set /p "=%%a "<nul
  echo "%%a" |find /i "Born" >nul && echo(
)
pause

答案 2 :(得分:0)

这个怎么样:

echo off
setlocal enabledelayedexpansion

set xSurname=
for /f "tokens=1,2 delims=: " %%a in (%TEMP%\names.txt) do (
    if /i '%%a'=='Num' set xNum=%%b
    if /i '%%a'=='Name' set xName=%%b
    if /i '%%a'=='Surname' set xSurname=%%b
    if not '!xSurname!'=='' (
        echo Num: !xNum! Name: !xName! Surname: !xSurname!
        set xSurname=
    )
)

假设Surname行结束一个块(Born:被忽略)并输出它收集到块中该点的内容。注意我已将路径更改为%TEMP% vs C:\tmp。您可能会使用操作系统设置的%TEMP%做得更好。