我在文本文件(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个数据但不起作用。我做错了什么?
答案 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%
做得更好。