[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理findstr /x参数为何查找错误?

g:\d.txt 里面就一行
111


findstr /x /i "111" g:\d.txt
始终查找不成功

今天研究findstr,死了N多脑细胞

最后才知道问题在哪里

哈哈,有没人知道啊,晚上来看

对findstr的Bug已经见怪不怪了。

在某帖子里看到版主说过,findstr要求的换行至少要有\r,即\r或\r\n都行,但Linux格式的换行\n则不识别。

TOP

回复 8楼 的帖子

恩,XP SP2

TOP

回复 7楼 的帖子

你是XP系统?
我的Vista SP2里面一切正常。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

测试发现,如果文本内只有 1 个字节的字符,用 type 会失败。

例如:
1、文本内只有“1”这个字符,且没有换行,用 type d.txt | findstr /x "1" 会失败,用 more 成功;
2、文本内只有“字”这个字符,且没有换行,用 type d.txt | findstr /x "字" 成功

--------------------------
如果最后一行不是空行,findstr /x "BatHome" < 1.txt 会卡住。

[ 本帖最后由 tmplinshi 于 2010-12-30 21:10 编辑 ]

TOP

由于我没多加几行测试,那样肯定知道最后一行有问题

只弄了一行,结果就郁闷了

版主正确:
如果g为盘符:
1,要求 111 所在行最后换行(0d 0a)。如果没有,则:type g:\d.txt|findstr /x /i "111"

TOP

不好意思,忘记说了

findstr /i "111" g:\d.txt

不加 /x 参数是可以执行成功的

最后研究结果
g:\d.txt 文件里的
111
后面加个回车,则 /x 参数就可识别该行

若是没有回车,/x 参数认为这不是一个完整的行,就不能完全匹配了

TOP

  1. type 1.txt | findstr /x "BatHome"
复制代码
  1. findstr /x "BatHome" < 1.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 hanyeguxing 于 2010-12-30 13:56 发表
1,语法错误:g:\d.txt 应该写成 /g:d.txt
2,语法错误: "匹配内容" 和 /g 不可以同时存在

难道就不能是 g盘的d.txt吗?

TOP

如果g为参数:
1,语法错误:g:\d.txt 应该写成 /g:d.txt
2,语法错误: "匹配内容" 和 /g 不可以同时存在
如果g为盘符:
1,要求 111 所在行最后换行(0d 0a)。如果没有,则:type g:\d.txt|findstr /x /i "111"
2,要求编码为ANSI。如果为Unicode,则:type g:\d.txt|findstr /x /i "111"

[ 本帖最后由 hanyeguxing 于 2010-12-30 19:05 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表