中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-30 18:00
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结案]连续两次嵌套for执行错误 查看 744 回复 6
楼 主 [已结案]连续两次嵌套for执行错误 发表于 2010-03-25 22:18 ·  中国 北京 联通
新手上路
积分 13
发帖 11
注册 2007-02-24 21:09
19年会员
UID 80087
性别 男
状态 离线
@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 ]
2 发表于 2010-03-25 22:51 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
dir *.exe /b>exelst.txt

你最好给出列表
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
3 发表于 2010-03-25 22:52 ·  中国 广东 揭阳 电信
初级用户
★★
积分 131
发帖 72
注册 2008-02-24 14:31
18年会员
UID 111317
性别 男
状态 离线
findstr /i "-V"'

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

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


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


findstr /i "\-V" 这样才是正确的。。。。
4 发表于 2010-03-25 23:03 ·  中国 北京 联通
新手上路
积分 13
发帖 11
注册 2007-02-24 21:09
19年会员
UID 80087
性别 男
状态 离线
确实是这个问题,findstr /i "\-V"就没有问题
在此谢谢楼上的两位
5 发表于 2010-03-26 06:13 ·  中国 台湾 台湾宽频通讯顾问股份有限公司
初级用户
★★
积分 68
发帖 64
注册 2009-05-23 20:43
17年会员
UID 145803
性别 男
状态 离线
(1) LZ可否贴出最后正确所有完整语法 ?
(2) 若问题已解决,标题注明[已结案]
6 发表于 2010-03-26 14:41 ·  中国 北京 歌华宽带
新手上路
积分 13
发帖 11
注册 2007-02-24 21:09
19年会员
UID 80087
性别 男
状态 离线
楼上提醒的是,下面是正确的代码:

@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
)
)
7 发表于 2010-03-26 15:07 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
尽量少使用过多的for嵌套,以你的批处理,可以发挥findstr的表达式查找功能,例如查找XPSX-X-VX(X代表若干任意字符),可以直接写成findstr /i ".*ps.*\-.*\-V.*",不需要多此解析多次使用findstr。
论坛跳转: