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

[文本处理] [已解决]批处理命令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 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2
Still with wax

转义
findstr /v "\[.*\]" a.txt

TOP

晕啊,果真如我所料,我用了转义,可是用的是^,呵呵,多谢仁兄周勇军啦
Still with wax

TOP

回复 2楼 的帖子

我重新修改过了,可是用\转义也不行啊
Still with wax

TOP

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

TOP

回复 5楼 的帖子

仁兄的代码和2楼的代码是一样的啊,我测试过了,不行的,CMD窗口一直停那不动,生成的文本也是0字节。不知道为什么。
Still with wax

TOP

回复 4楼 的帖子

我这可以啊。你的P是不是命名为findstr或者同目录下有findstr命名的文件?
1

评分人数

    • Lumiere: 佩服,一针溅血,一针见血……PB + 8 技术 + 1

TOP

回复 7楼 的帖子

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

TOP

回复 7楼 的帖子

看来是自身调运进入了死循环,可是bat代码里面有那么多参数,照道理应该提示错误才对,为什么就那样死在那了呢?
Still with wax

TOP

这是批处理本身运行机制的问题,一个命令它是按下面顺序查找的:
查找自身内部命令
P的当前目录
环境变量目录
findstr是外部命令,所以是优先级别低于当前目录的findstr文件

TOP

回复 9楼 的帖子

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

如果问题得到解决,请给标题主动添加【已解决】字样,谢谢!
(*^_^*)

TOP

回复 10楼 的帖子

多谢兄,又上了一课,呵呵
Still with wax

TOP

回复 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.
Still with wax

TOP

回复 13楼 的帖子

Lumiere兄的英语太帅了,我建议可以去参加论坛的有奖翻译!^_^
(*^_^*)

TOP

回复 14楼 的帖子

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

TOP

返回列表