中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]请教一下for /f " delims== tokens=2"
作者:
标题: [求助]请教一下for /f " delims== tokens=2" 上一主题 | 下一主题
lywlhs
初级用户





积分 25
发帖 10
注册 2008-10-3
状态 离线
『楼 主』:  [求助]请教一下for /f " delims== tokens=2"

问题一:
比如我现在有一个123.TXT的文件,每一行都有3个内容,
例如:
星期一=上课=游泳
星期二=劳动=植树
星期三=休息=看电视
……=……=……

for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%a
for /f " delims== tokens=3" %%b in ('more ^<C:\123.txt^|find /i "星期一"') do set 2work=%%b
我现在要用2条命令才能得到2个变量,能不能把2个命令写成一个,并且得到这2个变量?

问题二:
星期一=上课
星期二=劳动
星期三=休息
……=……
tokens=1* 意思是第1个字符串后面的所有内容,tokens=2 是第2个字符串。
for /f " delims== tokens=1*" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b
这里tokens=1* 后面do set 1work=%%b  为什么do set 1work=%%a就显示的“星期一”?

问题三:
把上面123.txt里的内容中的“=”号去掉 下面的命令里delims=应该怎么写?还是有别的写法?
星期一 上课 游泳
星期二 劳动 植树
星期三 休息 看电视
…… …… ……
我还是个新手,可能问的问题很简单,但我是真的不会,还请高手帮忙指点一下。谢谢了。

2008-10-3 18:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

1.
tokens
2.
不知道你说啥
仔细看/?

3.
set /?
2下空格后那段帮助仔细看



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-10-3 18:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lywlhs
初级用户





积分 25
发帖 10
注册 2008-10-3
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by slore at 2008-10-3 18:31:
1.
tokens
2.
不知道你说啥
仔细看/?

3.
set /?
2下空格后那段帮助仔细看

1。
我上面用的就是tokens,我不会用一条命令得出2个变量。现在只能用2条命令,我想能不能用1条命令就可以?怎么写?
2.
for /f " delims== tokens=1*" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b
for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b
就不正确了。必须是
for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%a
才可以。就是不明白为什么,所以请教一下。

3。
你的回答我看不懂。

2008-10-3 18:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zb1007zb
初级用户




积分 88
发帖 39
注册 2008-8-16
状态 离线
『第 4 楼』:  

for /f "tokens=2,3 delims== "%%a  ……



试试

其实你如果 for /f "tokens=2,3 delims== "%%a 了 2和3的段都会被赋值到 %%a %%b %%c 里面去

[ Last edited by zb1007zb on 2008-10-3 at 18:52 ]



/? 永远是你最好的老师
2008-10-3 18:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lywlhs
初级用户





积分 25
发帖 10
注册 2008-10-3
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by zb1007zb at 2008-10-3 18:50:
for /f "tokens=2,3 delims== "%%a  ……



试试

其实你如果 for /f "tokens=2,3 delims== "%%a 了 2和3的段都会被赋值到 %%a %%b %%c 里面去

[ Last edi ...

然后
set 1work=%%a
set 2work=%%b
…………
是这样吧?

我这样好像是多此一举。。。。。
第2个问题和第三个问题,还等待弄明白。看到的高手给解释一下。
谢谢了。


谢谢楼上的。

[ Last edited by lywlhs on 2008-10-3 at 19:36 ]

2008-10-3 19:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:  

tokens
我把s高亮了……说明不是后面只能写一个。

你没有好好看帮助麽?

给的例子是
某些范例可能有助:

For /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
取得第二个符号,引用 %j 来取得第三个符号,引用 %k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名,您需要用双引号将文件名括起来。为了用这种方式来使
用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。


3.

set /?


环境变量替换已如下增强:

    %PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2008-10-3 20:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 7 楼』:  

问题一
for /f "delims== tokens=2,3" %%a in ('findstr "星期一" C:\123.txt') do echo %%a %%b
问题二
就是那样用的。

问题三
delims 默认的分隔符是 空格 和 Tab

   此帖被 +1 点积分     点击查看详情   
评分人:【 dosz 分数: +1  时间:2009-3-4 09:34


2008-10-3 21:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Evangel
初级用户





积分 145
发帖 95
注册 2008-4-12
状态 离线
『第 8 楼』:  

又偷学一招:%str:str1=str2%。。。

2008-10-3 21:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lserfn
初级用户





积分 97
发帖 49
注册 2008-9-24
状态 离线
『第 9 楼』:  

问题一:
比如我现在有一个123.TXT的文件,每一行都有3个内容,
例如:
星期一=上课=游泳
星期二=劳动=植树
星期三=休息=看电视
……=……=……

for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%a
for /f " delims== tokens=3" %%b in ('more ^<C:\123.txt^|find /i "星期一"') do set 2work=%%b
我现在要用2条命令才能得到2个变量,能不能把2个命令写成一个,并且得到这2个变量?
for /f "tokens=2,3 delims==" %%a in ('more ^<C:\123.txt^|find /i "星期一") do set 1work=%%a


问题二:
星期一=上课
星期二=劳动
星期三=休息
……=……
tokens=1* 意思是第1个字符串后面的所有内容,tokens=2 是第2个字符串。
for /f " delims== tokens=1*" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b
这里tokens=1* 后面do set 1work=%%b  为什么do set 1work=%%a就显示的“星期一”?

tokens=1* 1和1后面的所有内容  也就是说%%a 是在第一列 那么后面的内容当然就是照着顺序走了  %%b就是上课

问题三:
把上面123.txt里的内容中的“=”号去掉 下面的命令里delims=应该怎么写?还是有别的写法?
星期一 上课 游泳
星期二 劳动 植树
星期三 休息 看电视
delims= 直接留个空格

2008-10-3 21:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: