Board logo

标题: [已结案]连续两次嵌套for执行错误 [打印本页]

作者: wangyc     时间: 2010-3-25 22:18    标题: [已结案]连续两次嵌套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 ]
作者: slore     时间: 2010-3-25 22:51
dir *.exe /b>exelst.txt

你最好给出列表
作者: lovelymorning     时间: 2010-3-25 22:52
findstr /i "-V"'

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

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


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


findstr /i "\-V"  这样才是正确的。。。。
作者: wangyc     时间: 2010-3-25 23:03
确实是这个问题,findstr /i "\-V"就没有问题
在此谢谢楼上的两位
作者: pdanniel66     时间: 2010-3-26 06:13
(1) LZ可否贴出最后正确所有完整语法 ?
(2) 若问题已解决,标题注明[已结案]
作者: wangyc     时间: 2010-3-26 14:41
楼上提醒的是,下面是正确的代码:
@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
        )
)

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