中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 我的findstr怎么了 上一主题 | 下一主题
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『楼 主』:  我的findstr怎么了

D:\scripts>for /F %i in ('dir /ad /s /b') do echo %~ni   | findstr "123"

D:\scripts>echo 123   | findstr "123"
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
^CEnter your code:Enter your code:Enter your code:Enter your code:Enter your cod
e:Enter your code:Enter your code:Enter your code:^C^CEnter your code:Enter your
code:^C^CERROR!!!

2006-9-27 01:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  你的代码有点问题,试试下面这个语句呢:
for /F %i in ('dir /ad /s /b') do (echo %~ni|findstr "123">nul && echo %~ni)




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-27 01:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 3 楼』:  

好像还是不行啊

D:\scripts>for /F %i in ('dir /ad /s /b') do (echo %~ni  | findstr "123"   && ec
ho %~ni )

D:\scripts>(echo 123  | findstr "123"   && echo 123 )
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:
Enter your code:Enter your code:Enter your code:Enter your code:Enter your code:

2006-9-27 01:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  你干脆把下面的代码放到批处理来执行算了,在CMD窗口里很受干扰的。
@echo off
for /F %%i in ('dir /ad /s /b') do (echo %%~ni|findstr "123">nul && echo %%~ni)
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-27 02:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 5 楼』:  

你的bat名字是不是findstr.bat ?




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-9-27 02:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
9527
银牌会员

努力做坏人


积分 1185
发帖 438
注册 2006-8-28
来自 北京
状态 离线
『第 6 楼』:  

LZ想要实现什么效果???不明白,是找123命名的文件夹吗?还是???



我今后在论坛的目标就是做个超级坏人!!!
2006-9-27 02:34
查看资料  发短消息 网志  OICQ (329429)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 7 楼』:  

没有遇到过

2006-9-27 08:12
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by smileseeker at 2006-9-27 01:18:
D:\scripts>for /F %i in ('dir /ad /s /b') do echo %~ni   | findstr "123"

D:\scripts>echo 123   | findstr "123"
Enter your code:Enter your code:Enter your code:Enter yo ...

很明显你的代码是错误的. dir /ad /s /b是查找文件夹, 而%~ni为扩展到文件名. 哪里来的文件名吗? 根本就只有路径.

代码修改为:
@echo off
for /F "tokens=*" %%i in ('dir /a-d /s /b *.*') do (
    echo %%~ni  | findstr "123" && echo 找到匹配文件
)
pause

请保存为批处运行.

2006-9-27 09:25
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by pengfei at 2006-9-27 09:25:


很明显你的代码是错误的. dir /ad /s /b是查找文件夹, 而%~ni为扩展到文件名. 哪里来的文件名吗? 根本就只有路径.

代码修改为:
@echo off
for /F "t ...

本来windows就认不出什么是文件什么是路径的,问个问题,有个文件夹a.txt ,你说它是文件夹还是文件???更何况是机器,它怎么认的出

2006-9-27 09:28
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 10 楼』:  

刚才测试了一下我的电脑没有出现错误提示.

我是认为%%~ni为扩展到文件名! 如果为路径扩展会出现错误.

[ Last edited by pengfei on 2006-9-27 at 09:40 ]

2006-9-27 09:32
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by pengfei at 2006-9-27 09:32:
刚才测试了一下我的电脑没有出现错误提示.

我是认为%%~ni为扩展到文件名! 如果为路径扩展会出现错误.

[ Last edited by pengfei on 2006-9-27 at 09:40 ]

cd c:\
md test
cd test
md 123
md 123456
for /F %i in ('dir /ad /s /b') do echo %~ni   | findstr "123"

你执行这个看看,看看会不会出错

2006-9-27 09:42
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by he200377 at 2006-9-27 09:28:

本来windows就认不出什么是文件什么是路径的,问个问题,有个文件夹a.txt ,你说它是文件夹还是文件???更何况是机器,它怎么认的出

  此言差矣。CMD下的 dir 是可以区分出某个file到底是文件夹还是文件的,要不然,dir命令还要 /ad 和 /a-d 这两个参数干什么呢?如果按照你的理解,它们岂不成了摆设了吗?你建立一个a.txt的文件夹,分别用 dir /ad 和 dir /a-d 来试试,看dir是不是能正确区分出来。

  只是在for语句的扩展中,%~xi 简单地认为最后一个以点号结束的字符串是后缀名,从而造成把文件夹a.txt的后缀名误认为是.txt的情况。如果据此就认为windows不能正确区分文件和路径的话,那就大错特错了。不过这也证明了for语句的扩展是有bug的,使用的时候千万要小心。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-27 09:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 13 楼』:  

是的, 看来是我错了.  没有经过测试, 只是理论推断.

2006-9-27 09:44
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 14 楼』:  

分别用 dir /ad 和 dir /a-d 来试试

一言指明哈~原来 dir 可以排除目录的,搞的上次为了这个排除目录而想方法,这次回去再 *.exe /? 看看

2006-9-27 09:52
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by he200377 at 2006-9-27 09:42:

cd c:\
md test
cd test
md 123
md 123456
for /F %i in ('dir /ad /s /b') do echo %~ni   | findstr "123"

你执行这个看看,看看会不会出错

  从这段代码来看,你是在CMD窗口下执行的。从你的整体意思来看,你是想先转到 C 盘根目录下之后再创建文件夹,但是你最开始的那一句就没写对,因为它并不能跳转到 C 盘根目录下,请想想这是为什么;并且,你最后的for语句不完整,所以就算你前面的代码都写对了,执行到这里的时候也会发生错误的。

  以上代码我是在批处理中把 %i 替换成 %%i 来执行的,所以导致以上言论出了错,在此更正,并对导致别人的误解表示歉意。

[ Last edited by namejm on 2006-9-27 at 10:16 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-27 09:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: