中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: dos中的数组----随笔 上一主题 | 下一主题
5yue5
初级用户





积分 69
发帖 34
注册 2009-2-8
状态 离线
『楼 主』:  dos中的数组----随笔

FOR /F ['OPTIONS'] %VARIABLE IN (FILE-SET) DO COMMAND   ---S1
FOR /F ['OPTIONS'] %VARIABLE IN ("STRING") DO COMMAND   ---S2
FOR /F ['OPTIONS'] %VARIABLE IN ('COMMAND') DO COMMAND  ---S3

  从数组的角度去理解for /f 语句应该说是一个比较好的方法。
s1---
  这句里面的file-set其内容就是一个数组,数组的元素默认是以空格分开的
file-set 在for看起来就象下面的样子:
-----------
11 12 13 14
21 22 23 24
31 32 33 34
-----------

s1这句里面的%variable默认只的就是这个数组里面的第一列,
而['OPTIONS']部分,就是用来改变这个数组的。
s2----
  这句里面的"STRING" 不再是数组,而是一个普通的字符串。
此时 %variable默认就是等于"STRING"
这里如果用上usebackq,这将告诉for,是从数组里面取数据。
从这个角度看usebackq有反面的含义在里面

s3----
  这句里面的'COMMAND'告诉for,要用的是这个命令的结果,
而这个命令的结果,for把它当数组看待的。
此时 %variable默认只的就是这个数组里面的第一列,
而['OPTIONS']部分,就是用来改变这个数组的。
这里如果用上usebackq,就是告诉for不是从数组里面取数据。
从这个角度看usebackq有反面的含义在里面

  dos里面也有数组的观点。用数组的观点去理解
eol,tokens,delims,skip这些就很容易了,它们只是命令for从最原始
的那个数组里面去截取子数组吧了。
  而for里面的%~i就是把%i得到的数组元素,扩展为一个更大的
数组的元素吧了。
  还有一点就是for 最多只可以同时操作这个数组的26列。

想想这个想法还挺有趣的。

修订:  还有一点就是for 最多只可以同时操作这个数组的26列。这句应该改为
还有一点就是for 最多只可以同时操作26个参数。

[ Last edited by 5yue5 on 2009-3-1 at 04:23 ]

   此帖被 +6 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2009-2-20 11:16
评分人:【 lxmxn 分数: +4  时间:2009-2-26 06:00


2009-2-20 02:10
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

总结的不错,很形象,不过下面这句话是错误的,自己验证下。

  Quote:
还有一点就是for 最多只可以同时操作这个数组的26列。



2009-2-26 06:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhengqian529
初级用户





积分 100
发帖 93
注册 2009-1-14
来自 湖南
状态 离线
『第 3 楼』:  

楼上能解释一下吗?

2009-2-26 06:56
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (250988158)  编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 4 楼』:  

一、tokens=1-26*
二、%%A~%%Z %%[ %%\ %%]
三、不带参数的 FOR
其他

   此帖被 +1 点积分    点击查看详情   
评分人:【 zhengqian529 分数: +1  时间:2009-2-27 05:26




┌───────┐
├→学习→实践→┤
└───────┘
2009-2-26 10:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 5 楼』:  

for /f "tokens=1-31" %%1 in (a.txt) do echo %%o
这样可以处理31个

   此帖被 +1 点积分    点击查看详情   
评分人:【 zhengqian529 分数: +1  时间:2009-2-27 05:26




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-2-26 13:41
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
zhengqian529
初级用户





积分 100
发帖 93
注册 2009-1-14
来自 湖南
状态 离线
『第 6 楼』:  

恩。了解了谢谢。。

2009-2-27 05:27
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (250988158)  编辑帖子  回复  引用回复
5yue5
初级用户





积分 69
发帖 34
注册 2009-2-8
状态 离线
『第 7 楼』:  我的确没验证过。谢谢 呵呵

看来微软的东东,要亲自验证才可以。不能望文生意。

2009-3-1 04:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: