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

[文本处理] 批处理命令findstr是否可以把条件并到一起?

findstr是否可以把条件并到一起??
多个条件怎么拼接???????????

------------------------------------------------------------------------
需求读取txt,以时间格式开头并且行内不含有“ERROR” 字符串的全部输出到新文本!!!
  1. 2014-05-14 00:12:45,469 INFO  [STDOUT] 00:12:45,469
  2. 2014-05-14 00:12:46,672 ERROR  [STDOUT] 00:12:46,672
  3. 2014-05-14 00:13:45,501 INFO  [STDOUT] 00:13:45,501 ERROR
  4. 2014-05-14 00:14:45,537 ERROR  [STDOUT] 00:14:45,537
  5. 2014-05-14 00:14:54,335 INFO  [STDOUT] 00:14:54,335
  6. <tracking_type>1</tracking_type>
  7. <custid>0215138009</custid>
  8. <language>1</language>
  9. <checkword>118c98ed78c84ea0a765307962be7da8</checkword>
复制代码
结果需要:
2 3 4 6 7 8 9行输出~
因文本较大不要使用按行读取!即 for
直接用findstr实现

计算运行时间 单独对着怎么放到if语句里就报没有操作数~~~
  1. echo 现在时间是%time:~0,2%点%time:~3,2%分%time:~6,2%秒
  2. set time1=%time:~0,2%%time:~3,2%%time:~6,2%
  3. pause
  4. echo 现在时间是%time:~0,2%点%time:~3,2%分%time:~6,2%秒
  5. set time2=%time:~0,2%%time:~3,2%%time:~6,2%
  6. set /a time3=%time2%-%time1%
  7. echo 间隔%time3%秒
复制代码

TOP

回复 3# terse


    反了是什么意思???


----------------------------------------------------------------------------------------------
还有下面这个  if !flag! equ 2 怎么每次都是跳到else里~~
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. echo 开始时间:%time%
  4. set flag=0
  5. (for /f "delims=" %%i in (1.txt) do (
  6.   set "str=%%i"
  7.   set "j=%%i"
  8.   set "str=!str:~0,300!"
  9.    echo "!str!" | findstr "^.....-..-..." >nul
  10.     if !errorlevel! equ 0 (
  11.         echo "!str!" | findstr " ERROR " >nul
  12.         if !errorlevel! equ 0 (
  13.   set flag=2
  14.           echo. !j!
  15.         )else (
  16.   set flag=0
  17. )
  18.     ) else (
  19.          if !flag! equ 2 (
  20.           echo. !j!
  21.   echo 3333:!flag!
  22. )else (
  23.   echo 222:!flag!
  24. )
  25.     )
  26. ))>>flag_text.txt
  27. echo 结束时间:%time%
  28. pause
复制代码

TOP

本帖最后由 terse 于 2014-5-16 14:30 编辑

你的矛盾述说 造成直接错误结果
两个总有一个你要的
好像弄反了噢
  1. (findstr /i "^[1-2][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" | findstr /iv "\<ERROR\>")<b.txt >结果1.txt
复制代码
临时文件过渡 反了
  1. @ECHO OFF
  2. (findstr /i ^[1-2][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] | findstr /iv "\<ERROR\>")<b.txt >$
  3. findstr /ilxvg:$ b.txt>结果.txt
  4. del $
  5. pause
复制代码

TOP

如果一定要用FINDSTR的话 恐怕难 至少排序不是原文件的

TOP

返回列表