中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]请问如何在for的符号列表中同时使用|和空格?
作者:
标题: [已解决]请问如何在for的符号列表中同时使用|和空格? 上一主题 | 下一主题
wiq
初级用户




积分 179
发帖 35
注册 2003-6-3
状态 离线
『楼 主』:  [已解决]请问如何在for的符号列表中同时使用|和空格?

test.txt内容如下:
IP:21.161.95.021 MAC:001277467DEC 23040803|mAbwRQ8Na7U=|2304|wsjy|bb|
我想使用for循环找出这个文件中的IP,MAC,23040803,2304,wsjy等

[ Last edited by wiq on 2009-11-9 at 12:52 ]

2009-11-6 14:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Evangel
初级用户





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

个人简单的方法没有,笨方法到有,就是使用嵌套的for,第一层将空格脱去,第二层再处理'|',不知道可否?
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3" %%a in ("IP:21.161.95.021 MAC:001277467DEC 23040803|mAbwRQ8Na7U=|2304|wsjy|bb|") do (
echo %%a
echo %%b
set cc=%%c
for /f "delims=| tokens=1,3,4" %%i in ("!cc!") do (
echo TEXT:%%i,%%j,%%k
)
)


2009-11-6 23:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lincc0519
初级用户




积分 24
发帖 17
注册 2009-10-7
状态 离线
『第 3 楼』:  

2楼的,可以直接用你的第2个for就行了把(delims=|)改成(delims= ^|)就行了,哦,^|前面用个空格,还有你的那个符号前面要加个^才行。

2009-11-6 23:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Evangel
初级用户





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



  Quote:
Originally posted by lincc0519 at 2009-11-6 11:36 PM:
2楼的,可以直接用你的第2个for就行了把(delims=|)改成(delims= ^|)就行了,哦,^|前面用个空格,还有你的那个符号前面要加个^才行。

我用的时候没问题呀?
F:\LAB>091106.bat
IP:21.161.95.021
MAC:001277467DEC
TEXT:23040803,2304,wsjy
不过兄的那个方法,自己的机子上没有成功,能否发个全的代码?

2009-11-6 23:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nerfg002
初级用户





积分 24
发帖 24
注册 2009-9-21
状态 离线
『第 5 楼』:  

加转义字符^就可以了

2009-11-7 00:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wiq
初级用户




积分 179
发帖 35
注册 2003-6-3
状态 离线
『第 6 楼』:  

谢谢各位!
二楼方法可行,我目前就是使用类似的方法。

我直接使用下面的会报错:此时不应有 ^| tokens=1,2,3,5,6"。
@echo off
setlocal enabledelayedexpansion
for /f "delims= ^| tokens=1,2,3,5,6" %%i in (test.txt) do echo %%i,%%j,%%k,%%l,%%m

[ Last edited by wiq on 2009-11-7 at 09:44 ]

2009-11-7 09:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  

换一下看看
"tokens=1,2,3,5,6 delims= ^|"



2009-11-7 10:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wiq
初级用户




积分 179
发帖 35
注册 2003-6-3
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by zh159 at 2009-11-7 10:33 AM:
换一下看看
"tokens=1,2,3,5,6 delims= ^|"

不行,还是一样的报错。

2009-11-7 14:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by wiq at 2009-11-7 09:41 AM:
谢谢各位!
二楼方法可行,我目前就是使用类似的方法。

我直接使用下面的会报错:此时不应有 ^| tokens=1,2,3,5,6"。
@echo off
setlocal enabledelayede ...

一般delims放到最后,要用多个分隔符且其中一个是空格时,空格放最后

  Quote:
@echo off
for /f "tokens=1,2,3,5,6 delims=^| " %%i in (test.txt) do echo %%i,%%j,%%k,%%l,%%m

pause





正在潜水修练的批处理小白
2009-11-7 15:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wiq
初级用户




积分 179
发帖 35
注册 2003-6-3
状态 离线
『第 10 楼』:  

谢谢楼上的大侠!将delims放到最后就可以了。

2009-11-9 12:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: