找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30320|回复: 7

[文本处理] 批处理命令findstr如何找到以空格开头的行?

[复制链接]
发表于 2014-9-12 16:29:54 | 显示全部楼层 |阅读模式
比如, a.exe会返回一系列输出信息,我需要从中找出以星号开头的或者以空格开头的.我试图这样但是没成功
a.exe | findstr "^* ^\x20"
发表于 2014-9-12 16:52:55 | 显示全部楼层
  1. a.exe | findstr /b /c:"*" /c:" "
复制代码
 楼主| 发表于 2014-9-12 17:07:16 | 显示全部楼层
回复 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.        
  3.         IF ERRORLEVEL 2 GOTO :FAILED
  4.         IF ERRORLEVEL 3 GOTO :FAILED
复制代码
发表于 2014-9-12 17:47:35 | 显示全部楼层
  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
复制代码
发表于 2014-9-12 17:59:31 | 显示全部楼层
回复 3# demonguy


    用于兼容空格的的是 /c
    /b 是个人习惯,比较通用,改用 ^ 也可以
 楼主| 发表于 2014-9-12 18:13:21 | 显示全部楼层
原来如此...
那么能请教下为什么像我那样子ERRORLEVEL会失效么
发表于 2014-9-12 19:15:20 | 显示全部楼层
回复 6# demonguy


    管道后面的findstr命令改变了errorlevel的值
 楼主| 发表于 2014-9-12 19:32:45 | 显示全部楼层
原来如此, 感谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 01:30 , Processed in 0.032211 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表