Board logo

标题: [文本处理] 批处理findstr /x参数为何查找错误? [打印本页]

作者: czjt1234    时间: 2010-12-30 13:27     标题: 批处理findstr /x参数为何查找错误?

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


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

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

最后才知道问题在哪里

哈哈,有没人知道啊,晚上来看
作者: hanyeguxing    时间: 2010-12-30 13:56

如果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 编辑 ]
作者: FOR    时间: 2010-12-30 14:16

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

难道就不能是 g盘的d.txt吗?
作者: Batcher    时间: 2010-12-30 15:12

  1. type 1.txt | findstr /x "BatHome"
复制代码
  1. findstr /x "BatHome" < 1.txt
复制代码

作者: czjt1234    时间: 2010-12-30 20:44

不好意思,忘记说了

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

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

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

若是没有回车,/x 参数认为这不是一个完整的行,就不能完全匹配了
作者: czjt1234    时间: 2010-12-30 20:48

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

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

版主正确:
如果g为盘符:
1,要求 111 所在行最后换行(0d 0a)。如果没有,则:type g:\d.txt|findstr /x /i "111"
作者: tmplinshi    时间: 2010-12-30 21:05

测试发现,如果文本内只有 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 编辑 ]
作者: Batcher    时间: 2010-12-30 23:47     标题: 回复 7楼 的帖子

你是XP系统?
我的Vista SP2里面一切正常。
作者: tmplinshi    时间: 2010-12-31 00:05     标题: 回复 8楼 的帖子

恩,XP SP2
作者: powerbat    时间: 2010-12-31 02:41

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

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2