中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-23 21:34
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 批处理中如何逐行读取文本并非将之设为变量?
可打印版本  3,730 / 23
第1楼 alfredhou 发表于 2006-04-05 05:19
初级用户 发帖 34 积分 100
批处理中如何逐行读取文本并非将之设为变量?
各位大哥,我是一名新手,想请教如何在批处理中逐行读取文本文件中的的信息并将之当成变量?例如,文件文件a.txt的内容为三行,分别是“123”、“456”、“789”,如何将它们逐一读出来,并将它赋值到三个变量A、B、C?即A=“123”,B=“456”,C=“789”?
第2楼 bagpipe 发表于 2006-04-05 09:13
银牌会员 发帖 425 积分 1,144 来自 北京
for /f "tokens=*" %%i in (a.txt) do (set /a A=123&set /a B=456&set /a C=789)
第3楼 3742668 发表于 2006-04-05 10:14
荣誉版主 发帖 718 积分 2,013
如果要完全达到楼主想要的效果的话,个人认为最好是启用扩展环境变量,然后在for里面设置自动递增,从而达到效果;另外可以直接在for里面用if语句来实现,缺点是代码比较冗余,可读性不是很好;另外还可以goto循环,每次用set /p var=<a.txt来读取,然后再把a.txt中已经读过的部分过滤掉,缺点是执行效率非常低,而且容错很差。
这样看来,似乎达到楼主的目的要花一番工夫了,其实不然,如果对各个命令都能了如指掌的话,利用各种命令的特性也可以变通地达到目的,比如findstr命令和find命令有个/n参数,可以在显示的查找结果每行前面加上行号,利用这个行号,也许能达到我们的要求。示例代码如下:

注意如果在批处理中运行上述代码时需先把%i更改为%%i,%j更改为%%j。
要点说明:
1,findstr显示的行号格式为 " 行号:内容 ",find的格式为 "内容",所以在delims中用冒号":"来分隔。
2,findstr后面的英文半角下句号“.”通配a.txt中的所有字符。
3,如果需要把变量定义到a中可以在后面加上一句set a=%1%,依次类推。
第4楼 alfredhou 发表于 2006-04-05 11:31
初级用户 发帖 34 积分 100
2楼可以注解一下吗?我是新手,看得不太懂。先谢谢啦
第5楼 alfredhou 发表于 2006-04-05 11:32
初级用户 发帖 34 积分 100
3楼能给出代码吗?我看不懂呀
第6楼 alfredhou 发表于 2006-04-05 11:51
初级用户 发帖 34 积分 100
问题是我如何才可以引用ABC的值?比如要把ABC的值加到B.TXT中去,如何实现?
第7楼 3742668 发表于 2006-04-05 12:00
荣誉版主 发帖 718 积分 2,013
echo %1% >>b.txt
echo %2% >>b.txt
echo %3% >>b.txt
第8楼 alfredhou 发表于 2006-04-05 12:17
初级用户 发帖 34 积分 100
7楼,你的意思是不是2楼的代码再加上你的代码,即:
for /f "tokens=*" %%i in (a.txt) do (set /a A=123&set /a B=456&set /a C=789)
echo %1% >>b.txt
echo %2% >>b.txt
echo %3% >>b.txt

但出来的结果,在了b.txt中的内容是:
……(这部分是b.txt原先的内容)
ECHO 处于打开状态。
ECHO 处于打开状态。
ECHO 处于打开状态。

但我想要的结果是:
……(这部分是b.txt原先的内容)
123
456
789

怎么办?
第9楼 alfredhou 发表于 2006-04-05 12:23
初级用户 发帖 34 积分 100
7楼,谢谢啦。我弄明白啦。可以这样:
for /f "tokens=*" %%i in (a.txt) do (echo %%i >> b.txt)

太感谢大家啦
第10楼 alfredhou 发表于 2006-04-05 12:26
初级用户 发帖 34 积分 100
我虽然可以用这句达到目的,但我对这条命令理解不透彻,哪位可以注解一下给我吗?不胜感激
第11楼 alfredhou 发表于 2006-04-05 12:32
初级用户 发帖 34 积分 100
我主要是对/F “taken=*"不是很明白,哪位大哥愿意帮帮我
第12楼 3742668 发表于 2006-04-05 12:48
荣誉版主 发帖 718 积分 2,013
Originally posted by alfredhou at 2006-4-5 05:19:
各位大哥,我是一名新手,想请教如何在批处理中逐行读取文本文件中的的信息并将之当成变量?例如,文件文件a.txt的内容为三行,分别是“123”、 ...

郁闷得紧,原来只是要追加而已,不是要赋值给变量。。
楼主告诉你一条更简单的:
type a.txt >>b.txt
第13楼 alfredhou 发表于 2006-04-05 14:23
初级用户 发帖 34 积分 100
是要赋值给变量啊,我的目的是要引用变量啊
第14楼 alfredhou 发表于 2006-04-05 14:42
初级用户 发帖 34 积分 100
3楼的代码好象运行不了。我在WIN2003上试
第15楼 3742668 发表于 2006-04-05 14:48
荣誉版主 发帖 718 积分 2,013
1,你执行了for /f "tokens=*" %%i in (a.txt) do (echo %%i >> b.txt)这一句后你怎么分别引用A,B,C三个变量?
2,我的代码下面写得很清楚了,在批处理中运行时候要最修改,那只是在命令行中运行的,运行完毕后可以通过echo %1% %2% %3%来查看是否正确引用到了变量。
3,代码经过测试,确实可执行。
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023