[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

回复 14楼 的帖子

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

TOP

回复 13楼 的帖子

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

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

回复 10楼 的帖子

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

TOP

回复 9楼 的帖子

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

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

TOP

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

TOP

回复 7楼 的帖子

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

TOP

回复 7楼 的帖子

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

TOP

回复 4楼 的帖子

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

评分人数

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

TOP

回复 5楼 的帖子

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

TOP

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

TOP

回复 2楼 的帖子

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

TOP

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

TOP

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

TOP

返回列表