中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-06 03:22
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 我的findstr怎么了
可打印版本  2,979 / 22
第1楼 smileseeker 发表于 2006-09-27 01:18
中级用户 发帖 83 积分 316
我的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!!!
第2楼 namejm 发表于 2006-09-27 01:23
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  你的代码有点问题,试试下面这个语句呢:
第3楼 smileseeker 发表于 2006-09-27 01:30
中级用户 发帖 83 积分 316
好像还是不行啊

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:
第4楼 namejm 发表于 2006-09-27 02:01
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  你干脆把下面的代码放到批处理来执行算了,在CMD窗口里很受干扰的。
第5楼 electronixtar 发表于 2006-09-27 02:11
铂金会员 发帖 2,672 积分 7,493
你的bat名字是不是findstr.bat ?
第6楼 9527 发表于 2006-09-27 02:34
银牌会员 发帖 438 积分 1,185 来自 北京
LZ想要实现什么效果???不明白,是找123命名的文件夹吗?还是???
第7楼 vkill 发表于 2006-09-27 08:12
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
没有遇到过
第8楼 pengfei 发表于 2006-09-27 09:25
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
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

请保存为批处运行.
第9楼 vkill 发表于 2006-09-27 09:28
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
Originally posted by pengfei at 2006-9-27 09:25:


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

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

本来windows就认不出什么是文件什么是路径的,问个问题,有个文件夹a.txt ,你说它是文件夹还是文件???更何况是机器,它怎么认的出
第10楼 pengfei 发表于 2006-09-27 09:32
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
刚才测试了一下我的电脑没有出现错误提示.

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

[ Last edited by pengfei on 2006-9-27 at 09:40 ]
第11楼 vkill 发表于 2006-09-27 09:42
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
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"

你执行这个看看,看看会不会出错
第12楼 namejm 发表于 2006-09-27 09:44
荣誉版主 发帖 1,737 积分 5,226 来自 成都
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的,使用的时候千万要小心。
第13楼 pengfei 发表于 2006-09-27 09:44
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
是的, 看来是我错了. 没有经过测试, 只是理论推断.
第14楼 vkill 发表于 2006-09-27 09:52
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
分别用 dir /ad 和 dir /a-d 来试试

一言指明哈~原来 dir 可以排除目录的,搞的上次为了这个排除目录而想方法,这次回去再 *.exe /? 看看
第15楼 namejm 发表于 2006-09-27 09:53
荣誉版主 发帖 1,737 积分 5,226 来自 成都
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 ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023