Board logo

标题: [文本处理] [已解决]批处理命令findstr无法识别字符中括号 [打印本页]

作者: Lumiere    时间: 2009-7-21 12:41     标题: [已解决]批处理命令findstr无法识别字符中括号

如题,本人在回帖的时候遇到一个很奇怪有趣的问题。如下,文本a.txt内容如下:
  1. [test:\]
  2. afaf
  3. *****
  4. afaslfjk
  5. *****
  6. [\]
  7. 4563756
  8. *****
  9. arjeljr
  10. [test:\1]
  11. *****
复制代码
本人用到的命令是
  1. @echo off
  2. findstr /v "[.*]" target.txt>>resolution.txt
  3. pause>nul
复制代码
按照findstr的命令行解释代码的意思是显示文本中所有没有[]匹配的行,中括号中间的字符用.*替代,应该符合findstr的语法。更奇怪的是,我第一次运行的时候,文本生成了,里面的内容是
  1. [test:\]
  2. afaf
  3. afaslfjk
  4. [\]
  5. 4563756
  6. arjeljr
  7. [test:\1]
复制代码
很明显这里findstr并没有将中括号连同里面的字符一起作为要匹配的对象,而是将其作为语法中指定字符集中括号的一部分了,所以有星号的行全跳过。更奇怪的是,我删除生成的resolution文本,过了一阵子再运行bat文件的时候,效果却不一样了,生成的resolution文本里面为空,CMD窗口一直停在那不动,过一会却提示拒绝访问,我崩溃了,同一个代码两次运行效果截然相反,这到底咋回事?难道是findstr的一个bug?麻烦高手指点一二。还有就是,如果文本中有中括号,要用findstr命令将其过滤掉,如文本a所示,该怎么写这个代码?[

[ 本帖最后由 Lumiere 于 2009-7-21 17:27 编辑 ]
作者: zhouyongjun    时间: 2009-7-21 12:55

转义
findstr /v "\[.*\]" a.txt
作者: Lumiere    时间: 2009-7-21 13:12

晕啊,果真如我所料,我用了转义,可是用的是^,呵呵,多谢仁兄周勇军啦
作者: Lumiere    时间: 2009-7-21 13:14     标题: 回复 2楼 的帖子

我重新修改过了,可是用\转义也不行啊
作者: terse    时间: 2009-7-21 13:24

应该可以吧
  1. findstr /ibv "\[.*\]" ok.txt >ook.txt
复制代码

作者: Lumiere    时间: 2009-7-21 14:37     标题: 回复 5楼 的帖子

仁兄的代码和2楼的代码是一样的啊,我测试过了,不行的,CMD窗口一直停那不动,生成的文本也是0字节。不知道为什么。
作者: zhouyongjun    时间: 2009-7-21 14:52     标题: 回复 4楼 的帖子

我这可以啊。你的P是不是命名为findstr或者同目录下有findstr命名的文件?
作者: Lumiere    时间: 2009-7-21 15:12     标题: 回复 7楼 的帖子

星爷你真牛啊,佩服,一针溅血,因为我用find和findstr两个命令得到两种方案,所以就把bat文件命名成命令的文件名了,刚才一直纳闷每次结果都不一样,很有趣,刚才我一点运行,任务管理器李的cmd.exe进程就疯长,CMD窗口就一直停在那不动。现在终于原因了。为什么bat文件那样命名的话就会出现这样的问题呢?
作者: Lumiere    时间: 2009-7-21 15:15     标题: 回复 7楼 的帖子

看来是自身调运进入了死循环,可是bat代码里面有那么多参数,照道理应该提示错误才对,为什么就那样死在那了呢?
作者: zhouyongjun    时间: 2009-7-21 15:22

这是批处理本身运行机制的问题,一个命令它是按下面顺序查找的:
查找自身内部命令
P的当前目录
环境变量目录
findstr是外部命令,所以是优先级别低于当前目录的findstr文件
作者: keen    时间: 2009-7-21 16:37     标题: 回复 9楼 的帖子

所以,切忌用命令作为文件名。

如果问题得到解决,请给标题主动添加【已解决】字样,谢谢!
作者: Lumiere    时间: 2009-7-21 17:24     标题: 回复 10楼 的帖子

多谢兄,又上了一课,呵呵
作者: Lumiere    时间: 2009-7-21 17:26     标题: 回复 11楼 的帖子

will do!i was just waiting for further answering from zhouyongjun before i put an end to this article.
anyway thank you for reminding me of this.
作者: keen    时间: 2009-7-21 17:32     标题: 回复 13楼 的帖子

Lumiere兄的英语太帅了,我建议可以去参加论坛的有奖翻译!^_^
作者: Lumiere    时间: 2009-7-21 21:10     标题: 回复 14楼 的帖子

巡查兄抬爱了,献献丑,还望前辈们别见笑就好。呵呵,有时间的话我会去挣些分的,多谢大家的回复啊!




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