中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结案]连续两次嵌套for执行错误
作者:
标题: [已结案]连续两次嵌套for执行错误 上一主题 | 下一主题
wangyc
新手上路





积分 13
发帖 11
注册 2007-2-24
状态 离线
『楼 主』:  [已结案]连续两次嵌套for执行错误


@echo off
for /f %%i in ('dir *.exe /b') do (
        for /f %%a in ('echo %%i^|findstr /i "ms"') do (
                for /f  "delims=- tokens=2" %%1 in ("%%a") do echo %%1
        )
        for /f %%b in ('echo %%i^|findstr /i "ps"') do (
                for /f "delims=- tokens=2" %%2 in ('echo %%b^|findstr /i "-V"') do echo %%2
                for /f "delims=- tokens=3" %%3 in ('echo %%b^|findstr /i /v "-v"') do echo %%3
        )
)
上面的例子,最下边的两个for在执行的时候都提示错误,不知道处于这里的for语句应该注意哪些细节的问题?

[ Last edited by wangyc on 2010-3-26 at 14:39 ]

2010-3-25 22:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





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

dir *.exe /b>exelst.txt

你最好给出列表



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





积分 131
发帖 72
注册 2008-2-24
状态 离线
『第 3 楼』:  

findstr /i "-V"'

findstr 后面那个东西。。   -V 。。。。会被解析成 findstr 的一个参数。。。

也就变成  findstr 有两个参数,一个是 /i 一个是 -v。。。。。。但少了一个参数。。就是 findstr 的内容是什么。。。没这个参数,所以就报错了。。。


- 是一个特殊符号。。。至少,在findstr这里算做是。。。如果真要找这个内容,必须使用  \ 来转义。。让 - 变成一个普通的字符才行


findstr /i "\-V"  这样才是正确的。。。。

2010-3-25 22:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangyc
新手上路





积分 13
发帖 11
注册 2007-2-24
状态 离线
『第 4 楼』:  

确实是这个问题,findstr /i "\-V"就没有问题
在此谢谢楼上的两位

2010-3-25 23:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pdanniel66
初级用户





积分 68
发帖 64
注册 2009-5-23
状态 离线
『第 5 楼』:  

(1) LZ可否贴出最后正确所有完整语法 ?
(2) 若问题已解决,标题注明[已结案]

2010-3-26 06:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangyc
新手上路





积分 13
发帖 11
注册 2007-2-24
状态 离线
『第 6 楼』:  

楼上提醒的是,下面是正确的代码:
@echo off
for /f %%i in ('dir *.exe /b') do (
        for /f %%a in ('echo %%i^|findstr /i "ms"') do (
                for /f  "delims=- tokens=2" %%1 in ("%%a") do echo %%1
        )
        for /f %%b in ('echo %%i^|findstr /i "ps"') do (
                for /f "delims=- tokens=2" %%2 in ('echo %%b^|findstr /i "\-V"') do echo %%2
                for /f "delims=- tokens=3" %%3 in ('echo %%b^|findstr /i /v "\-v"') do echo %%3
        )
)


2010-3-26 14:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 7 楼』:  

尽量少使用过多的for嵌套,以你的批处理,可以发挥findstr的表达式查找功能,例如查找XPSX-X-VX(X代表若干任意字符),可以直接写成findstr /i ".*ps.*\-.*\-V.*",不需要多此解析多次使用findstr。



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-3-26 15:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: