![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-26 02:08 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » FOR循环中如何取文件中一行用|分割的多个值? |
| 可打印版本 4,252 / 20 |
| 第1楼 tomorrower | 发表于 2006-09-27 03:14 |
| 初级用户 发帖 10 积分 28 | |
|
FOR循环中如何取文件中一行用|分割的多个值? 有一个文本a.txt
435241|阳新|8区 435250|白沙|8区 **** 怎么能够取到"|"分割的各个值? |
|
| 第2楼 NaturalJ0 | 发表于 2006-09-27 03:20 |
| 银牌会员 发帖 533 积分 1,181 | |
|
for /f "tokens=1,2,3 delims=|" %%i in (t.txt) do (...)
|
|
| 第3楼 tomorrower | 发表于 2006-09-27 04:35 |
| 初级用户 发帖 10 积分 28 | |
|
谢谢你的回复
%%i 指的是第几个值?第一个还是第二个还是第三个? |
|
| 第4楼 9527 | 发表于 2006-09-27 04:37 |
| 银牌会员 发帖 438 积分 1,185 来自 北京 | |
|
%%i 第一个
%%j 第二个 %%k 第三个 |
|
| 第5楼 vkill | 发表于 2006-09-27 08:05 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
楼主先 for /? 看看
|
|
| 第6楼 tomorrower | 发表于 2006-09-27 08:47 |
| 初级用户 发帖 10 积分 28 | |
Originally posted by pip at 2006-9-27 04:37: %%i ,%%j ,%%k 中i j k变量是随便的吗?随便的吗?还是确定顺序的? 我是菜鸟,虚心求助 |
|
| 第7楼 tomorrower | 发表于 2006-09-27 08:58 |
| 初级用户 发帖 10 积分 28 | |
|
我写的在这里,但是执行总是失败:
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) |
|
| 第8楼 pengfei | 发表于 2006-09-27 09:07 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
%%i, %%j, %%k是一个次序问题; 如果初始变量定义为%%a, 那么排序将会是%%a, %%b, %%c, %%d...; 同样如果初始变量为%%0, 排序就是%%0, %%1, %%2...
这和FOR语句提取到的字符或字符串的基数有关, 每提取到一个字符或字符串就赋给下一个变量. 依此类推. 当然也有个数限制, 如果是字母定义的变量他们的数量不能超过26个(a-z). 用阿拉伯数字定义变量最多不能超过10个(0-9). |
|
| 第9楼 namejm | 发表于 2006-09-27 10:00 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by pengfei at 2006-9-27 09:07: 个数有限制的说法是正确的,但是字母变量的个数不能超过26个就不准了,因为for语句中的字母变量是要区分大小写的,所以字母变量的个数应该不能超过52个。 |
|
| 第10楼 pengfei | 发表于 2006-09-27 10:10 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
是的, 那么作为52个变量的赋值规律是, 先从小写赋值完成再赋给大写吗?
帮助中也提到过一行指定最多26个字符, 而提到的不能同时使用52个以上, 由于没有深究也就没有提出来. [ Last edited by pengfei on 2006-9-27 at 10:17 ] |
|
| 第11楼 namejm | 发表于 2006-09-27 10:28 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by pengfei at 2006-9-27 10:10: 这个问题倒没深入地想过,推测是这样的:如果一开始就用了小写来定变量名,那么,同一层上的for后面的变量最多应该只能到z,如果是大写的话,最多就只能到Z,也就是说,变量名的大小写应该是从一而终的,不可混用的,否则,帮助里也就不会有 一行指定最多26个字符, 而提到的不能同时使用52个以上 这个提法了。仅是推测而已,有了解的请再深入地分析一下吧。 |
|
| 第12楼 pengfei | 发表于 2006-09-27 11:08 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
Originally posted by namejm at 2006-9-27 10:28: 我想是这样的吧, 一个循环中使用字母做变量不能为52个以上, 变量名只能为单一字母分大小写, 这样系统能够正常处理的字母变量就不能大于52个. 如果加上数字, 在全局中变量最多可以使用62个, 而FOR提取文本行赋于变量数不能大于26个(a-z)或(A-Z). |
|
| 第13楼 tomorrower | 发表于 2006-09-27 20:24 |
| 初级用户 发帖 10 积分 28 | |
|
大家帮帮忙看看我到底错在哪里啊?
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)" |
|
| 第14楼 NaturalJ0 | 发表于 2006-09-27 20:58 |
| 银牌会员 发帖 533 积分 1,181 | |
|
echo 那行的 () 打错了, >a.sql 应该和 ECHO 在一起的。
|
|
| 第15楼 piziliu2004 | 发表于 2006-09-28 04:20 |
| 中级用户 发帖 139 积分 321 | |
|
刚才帮你写的代码。 呵呵。有兴趣看看
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 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |