Board logo

标题: [文本处理] 批处理命令findstr如何找到以空格开头的行? [打印本页]

作者: demonguy    时间: 2014-9-12 16:29     标题: 批处理命令findstr如何找到以空格开头的行?

比如, a.exe会返回一系列输出信息,我需要从中找出以星号开头的或者以空格开头的.我试图这样但是没成功
a.exe | findstr "^* ^\x20"
作者: CrLf    时间: 2014-9-12 16:52

  1. a.exe | findstr /b /c:"*" /c:" "
复制代码

作者: demonguy    时间: 2014-9-12 17:07

回复 2# CrLf

原来如此,我一直在奇怪有了^为什么还有/B,那么/b的存在就是为了对付空格的情况么?

另外还想请教一下,我的a.exe会在执行结束后,根据执行的情况设置环境变量ERRORLEVEL 来让外部处理,比如
  1.         call a.exe
  2. IF ERRORLEVEL 2 GOTO :FAILED
  3. IF ERRORLEVEL 3 GOTO :FAILED
复制代码
但是现在我加了 findstr之后,似乎a.exe就再也不会去设置ERROELEVEL了,不知道为什么,也就是说无论如何都不会去执行GOTO语句了....
  1. call a.exe | findstr /b /c:"*" /c:" "
  2. IF ERRORLEVEL 2 GOTO :FAILED
  3. IF ERRORLEVEL 3 GOTO :FAILED
复制代码

作者: DAIC    时间: 2014-9-12 17:47

  1. REM 先把结果放到一个日志文件里面
  2. call a.exe > a.log 2>&1
  3. REM 使用 if errorlevel 这种语法的时候最好把最大的值放在最前面
  4. IF ERRORLEVEL 3 GOTO :FAILED
  5. IF ERRORLEVEL 2 GOTO :FAILED
  6. REM 从日志文件里面获取符合条件的内容
  7. findstr /b /c:"*" /c:" " a.log
复制代码

作者: CrLf    时间: 2014-9-12 17:59

回复 3# demonguy


    用于兼容空格的的是 /c
    /b 是个人习惯,比较通用,改用 ^ 也可以
作者: demonguy    时间: 2014-9-12 18:13

原来如此...
那么能请教下为什么像我那样子ERRORLEVEL会失效么
作者: DAIC    时间: 2014-9-12 19:15

回复 6# demonguy


    管道后面的findstr命令改变了errorlevel的值
作者: demonguy    时间: 2014-9-12 19:32

原来如此, 感谢各位




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