中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 01:36
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]求读取文件每行内容并赋值给变量的高效写法! 查看 1,333 回复 5
楼 主 [求助]求读取文件每行内容并赋值给变量的高效写法! 发表于 2010-09-10 04:24 ·  中国 湖北 武汉 电信
新手上路
积分 18
发帖 13
注册 2010-08-30 17:27
15年会员
UID 173270
性别 男
状态 离线
文件x.txt,共40行,如下格式:
ABC=11111
ABC=22222
ABC=33333
...
ABC=44444

需要读取每行,把=号后的值赋给变量。
写了2段代码来实现,代码1处理完得7秒多,代码2得6秒多,目前文件内容才40行就这么耗时。- -!
求更好的解决方法!

代码1:

for /f "tokens=1 delims=:" %%i in ('findstr /n "." x.txt') do @set tl=%%i

set line=0
set j=0
for /l %%i in (1,+1,%tl%) do (
set /a line+=1
set /a j+=1
for /f "tokens=1,3* delims=:=" %%a in ('findstr /n . x.txt') do if %%a==!line! set "n=%%b"
set Value!j!=!n!
)



代码2:

for /f "tokens=1 delims=:" %%i in ('findstr /n "." x.txt') do @set tl=%%i

set j=0
for /l %%i in (1,+1,%tl%) do (
set /a j+=1
for /f "tokens=1,2* delims==" %%a in ('sed -n "!j!p" x.txt') do set "n=%%b"
set Value!j!=!n!
)


[ Last edited by bugs on 2010-9-10 at 04:25 ]
2 发表于 2010-09-10 09:20 ·  中国 北京 263网络通信电信数据中心
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
搞不明白要findstr干嘛?要2个for干嘛?
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
3 发表于 2010-09-10 10:25 ·  中国 辽宁 葫芦岛 联通
中级用户
★★
积分 247
发帖 147
注册 2009-04-09 20:52
17年会员
UID 142531
性别 男
状态 离线
@echo off & setlocal ENABLEDELAYEDEXPANSION
set x=0 & IF EXIST TEMP.BAT DEL TEMP.BAT
for /f "tokens=1,2 delims==" %%c in (x.txt) do (set /a x+=1 & echo set Value!x!=%%d >>temp.BAT)
ENDLOCAL
IF EXIST TEMP.BAT (CALL TEMP.BAT & DEL TEMP.BAT)

[ Last edited by DXSX on 2010-9-10 at 10:52 ]
4 发表于 2010-09-12 07:43 ·  中国 湖北 襄阳 电信
新手上路
积分 18
发帖 13
注册 2010-08-30 17:27
15年会员
UID 173270
性别 男
状态 离线
Originally posted by DXSX at 2010-9-10 10:25:
@echo off & setlocal ENABLEDELAYEDEXPANSION
set x=0 & IF EXIST TEMP.BAT DEL TEMP.BAT
for /f "tokens=1,2 delims==" %%c in (x.txt) do (set /a x+=1 & echo set Value!x!=%%d &g ...

谢谢,很高效。

但是代码忽略了空行,如果想把空行也做为内容来处理怎么修改代码?

[ Last edited by bugs on 2010-9-12 at 07:45 ]
5 发表于 2010-09-12 08:49 ·  中国 辽宁 葫芦岛 联通
中级用户
★★
积分 247
发帖 147
注册 2009-04-09 20:52
17年会员
UID 142531
性别 男
状态 离线
Originally posted by bugs at 2010-9-12 07:43:

谢谢,很高效。

但是代码忽略了空行,如果想把空行也做为内容来处理怎么修改代码?

[ Last edited by bugs on 2010-9-12 at 07:45 ]


空行等于没有内容,用 set 是没有办法赋值的。也没有意义。
6 发表于 2010-09-12 09:51 ·  中国 湖北 襄阳 电信
新手上路
积分 18
发帖 13
注册 2010-08-30 17:27
15年会员
UID 173270
性别 男
状态 离线
Originally posted by DXSX at 2010-9-12 08:49:


空行等于没有内容,用 set 是没有办法赋值的。也没有意义。


嗯。了解。
我只是想让行号可以匹配对应值,方便些。如 40行 变量名就是value40
论坛跳转: