中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理中如何逐行读取文本并非将之设为变量?
« [1] [2] »
作者:
标题: 批处理中如何逐行读取文本并非将之设为变量? 上一主题 | 下一主题
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『楼 主』:  批处理中如何逐行读取文本并非将之设为变量?

各位大哥,我是一名新手,想请教如何在批处理中逐行读取文本文件中的的信息并将之当成变量?例如,文件文件a.txt的内容为三行,分别是“123”、“456”、“789”,如何将它们逐一读出来,并将它赋值到三个变量A、B、C?即A=“123”,B=“456”,C=“789”?

2006-4-5 05:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

for /f "tokens=*" %%i in (a.txt) do (set /a A=123&set /a B=456&set /a C=789)

2006-4-5 09:13
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 3 楼』:  

如果要完全达到楼主想要的效果的话,个人认为最好是启用扩展环境变量,然后在for里面设置自动递增,从而达到效果;另外可以直接在for里面用if语句来实现,缺点是代码比较冗余,可读性不是很好;另外还可以goto循环,每次用set /p var=<a.txt来读取,然后再把a.txt中已经读过的部分过滤掉,缺点是执行效率非常低,而且容错很差。
这样看来,似乎达到楼主的目的要花一番工夫了,其实不然,如果对各个命令都能了如指掌的话,利用各种命令的特性也可以变通地达到目的,比如findstr命令和find命令有个/n参数,可以在显示的查找结果每行前面加上行号,利用这个行号,也许能达到我们的要求。示例代码如下:
for /f "delims=: tokens=1,2" %i in ('"findstr /n . a.txt"') do set %i=%j
注意如果在批处理中运行上述代码时需先把%i更改为%%i,%j更改为%%j。
要点说明:
1,findstr显示的行号格式为    " 行号:内容    ",find的格式为 "[行号]内容",所以在delims中用冒号":"来分隔。
2,findstr后面的英文半角下句号“.”通配a.txt中的所有字符。
3,如果需要把变量定义到a中可以在后面加上一句set a=%1%,依次类推。

2006-4-5 10:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 4 楼』:  

2楼可以注解一下吗?我是新手,看得不太懂。先谢谢啦

2006-4-5 11:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 5 楼』:  

3楼能给出代码吗?我看不懂呀

2006-4-5 11:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 6 楼』:  

问题是我如何才可以引用ABC的值?比如要把ABC的值加到B.TXT中去,如何实现?

2006-4-5 11:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 7 楼』:  

echo %1% >>b.txt
echo %2% >>b.txt
echo %3% >>b.txt

2006-4-5 12:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 8 楼』:  

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

怎么办?

2006-4-5 12:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 9 楼』:  

7楼,谢谢啦。我弄明白啦。可以这样:
for /f "tokens=*" %%i in (a.txt) do (echo %%i >> b.txt)

太感谢大家啦

2006-4-5 12:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 10 楼』:  

我虽然可以用这句达到目的,但我对这条命令理解不透彻,哪位可以注解一下给我吗?不胜感激

2006-4-5 12:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 11 楼』:  

我主要是对/F “taken=*"不是很明白,哪位大哥愿意帮帮我

2006-4-5 12:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by alfredhou at 2006-4-5 05:19:
各位大哥,我是一名新手,想请教如何在批处理中逐行读取文本文件中的的信息并将之当成变量?例如,文件文件a.txt的内容为三行,分别是“123”、 ...

郁闷得紧,原来只是要追加而已,不是要赋值给变量。。
楼主告诉你一条更简单的:
type a.txt >>b.txt

2006-4-5 12:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 13 楼』:  

是要赋值给变量啊,我的目的是要引用变量啊

2006-4-5 14:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
alfredhou
初级用户





积分 100
发帖 34
注册 2006-4-5
状态 离线
『第 14 楼』:  

3楼的代码好象运行不了。我在WIN2003上试

2006-4-5 14:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 15 楼』:  

1,你执行了for /f "tokens=*" %%i in (a.txt) do (echo %%i >> b.txt)这一句后你怎么分别引用A,B,C三个变量?
2,我的代码下面写得很清楚了,在批处理中运行时候要最修改,那只是在命令行中运行的,运行完毕后可以通过echo %1% %2% %3%来查看是否正确引用到了变量。
3,代码经过测试,确实可执行。

2006-4-5 14:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: