中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » FOR循环中如何取文件中一行用|分割的多个值?
« [1] [2] »
作者:
标题: FOR循环中如何取文件中一行用|分割的多个值? 上一主题 | 下一主题
tomorrower
初级用户





积分 28
发帖 10
注册 2006-9-19
状态 离线
『楼 主』:  FOR循环中如何取文件中一行用|分割的多个值?

有一个文本a.txt

435241|阳新|8区
435250|白沙|8区
****

怎么能够取到"|"分割的各个值?

2006-9-27 03:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 2 楼』:  

for /f "tokens=1,2,3 delims=|" %%i in (t.txt) do (...)

2006-9-27 03:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tomorrower
初级用户





积分 28
发帖 10
注册 2006-9-19
状态 离线
『第 3 楼』:  

谢谢你的回复

%%i 指的是第几个值?第一个还是第二个还是第三个?

2006-9-27 04:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
9527
银牌会员

努力做坏人


积分 1185
发帖 438
注册 2006-8-28
来自 北京
状态 离线
『第 4 楼』:  

%%i  第一个
%%j  第二个
%%k 第三个



我今后在论坛的目标就是做个超级坏人!!!
2006-9-27 04:37
查看资料  发短消息 网志  OICQ (329429)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 5 楼』:  

楼主先 for  /?  看看

2006-9-27 08:05
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tomorrower
初级用户





积分 28
发帖 10
注册 2006-9-19
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by pip at 2006-9-27 04:37:
%%i  第一个
%%j  第二个
%%k 第三个

%%i ,%%j ,%%k 中i j k变量是随便的吗?随便的吗?还是确定顺序的?

我是菜鸟,虚心求助

2006-9-27 08:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tomorrower
初级用户





积分 28
发帖 10
注册 2006-9-19
状态 离线
『第 7 楼』:  

我写的在这里,但是执行总是失败:

for /f "tokens=1,2,3 delims=|" %%i in (txip.txt)

do ( echo 'update dzhd_t_txfjxx set v_ip=%%k where c_jgbh=%%i and c_txdm=%%j ;')

txip.txt的内容为:
31001402|07|10.138.9.165                                                        
31001402|05|10.238.60.81                                                        
31001402|06|10.138.9.164                                                        
31002001|05|10.138.9.37                                                         
31002001|06|10.138.9.38                                                         
31002801|01|10.138.13.10                                                        
31000903|01|10.138.20.68                                                        
31000903|03|10.138.20.74

错误信息为:
E:\ftp>sql.bat
命令语法不正确。

E:\ftp>for /f "tokens=1,2,3 delims=|" %i in (txip.txt)

2006-9-27 08:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 8 楼』:  

%%i, %%j, %%k是一个次序问题;  如果初始变量定义为%%a, 那么排序将会是%%a, %%b, %%c, %%d...;  同样如果初始变量为%%0, 排序就是%%0, %%1, %%2...

这和FOR语句提取到的字符或字符串的基数有关, 每提取到一个字符或字符串就赋给下一个变量. 依此类推.

当然也有个数限制, 如果是字母定义的变量他们的数量不能超过26个(a-z).

用阿拉伯数字定义变量最多不能超过10个(0-9).

2006-9-27 09:07
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by pengfei at 2006-9-27 09:07:
当然也有个数限制, 如果是字母定义的变量他们的数量不能超过26个(a-z).

  个数有限制的说法是正确的,但是字母变量的个数不能超过26个就不准了,因为for语句中的字母变量是要区分大小写的,所以字母变量的个数应该不能超过52个。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-27 10:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 10 楼』:  

是的, 那么作为52个变量的赋值规律是, 先从小写赋值完成再赋给大写吗?

帮助中也提到过一行指定最多26个字符, 而提到的不能同时使用52个以上, 由于没有深究也就没有提出来.

[ Last edited by pengfei on 2006-9-27 at 10:17 ]

2006-9-27 10:10
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by pengfei at 2006-9-27 10:10:
是的, 那么作为52个变量的赋值规律是, 先从小写赋值完成再赋给大写吗?

帮助中也提到过一行指定最多26个字符, 而提到的不能同时使用52个以上, 由䠮..

  这个问题倒没深入地想过,推测是这样的:如果一开始就用了小写来定变量名,那么,同一层上的for后面的变量最多应该只能到z,如果是大写的话,最多就只能到Z,也就是说,变量名的大小写应该是从一而终的,不可混用的,否则,帮助里也就不会有 一行指定最多26个字符, 而提到的不能同时使用52个以上 这个提法了。仅是推测而已,有了解的请再深入地分析一下吧。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-27 10:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by namejm at 2006-9-27 10:28:

  这个问题倒没深入地想过,推测是这样的:如果一开始就用了小写来定变量名,那么,同一层上的for后面的变量最多应该只能到z,如果是大写皠...

我想是这样的吧, 一个循环中使用字母做变量不能为52个以上, 变量名只能为单一字母分大小写, 这样系统能够正常处理的字母变量就不能大于52个.

如果加上数字, 在全局中变量最多可以使用62个, 而FOR提取文本行赋于变量数不能大于26个(a-z)或(A-Z).

2006-9-27 11:08
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
tomorrower
初级用户





积分 28
发帖 10
注册 2006-9-19
状态 离线
『第 13 楼』:  

大家帮帮忙看看我到底错在哪里啊?

for /f "tokens=2,3* delims=|" %%i in (txip1.txt)

do ( echo 'update dzhd_t_txfjxx set v_ip=%%k where c_jgbh=%%i and c_txdm=%%j ;') >a.sql

提示为"E:\ftp>rem for /f "tokens=1,2,3 delims=|" %0 in (txip1.txt)
命令语法不正确。

E:\ftp>for /f "tokens=2,3* delims=|" %i in (txip1.txt)"

2006-9-27 20:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 14 楼』:  

echo 那行的 () 打错了, >a.sql 应该和 ECHO 在一起的。

2006-9-27 20:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
piziliu2004
中级用户

过度热情


积分 321
发帖 139
注册 2006-3-21
状态 离线
『第 15 楼』:  

刚才帮你写的代码。 呵呵。有兴趣看看
Function splitfile(strFile)
Const ForReading = 1,ForWriting=2
Dim i, retstring
Set fso = CreateObject("Scripting.FileSystemObject")
Set theFile = fso.OpenTextFile(strFile, ForReading, False)
Do While theFile.AtEndOfStream <> True
retstring=Split(theFile.ReadLine,"|",-1,1)
For i=0 to UBound(retstring)
wscript.echo retstring(i)
Next
loop
theFile.Close
End Function



知识在于不断积累
2006-9-28 04:20
查看资料  发送邮件  发短消息 网志  OICQ (16750931)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: