[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 14# w31575801
EmEditor文本编辑器好像能实现,编写一个宏文件,可能效率较高,家里电脑上没有,明天到单位上看看,很久以前写过宏文件,忘个差不多了,先要熟悉一下,试试吧。

TOP

回复 14# w31575801

将7楼代码第4行中type "%%a"改为findstr /b "8: 9: 10: 11:" "%%a",初步筛选一下。
上面是举一个例子,表示筛选的是8~11点的数据,注意时间之间要有空格。这样效率应当高一点。

TOP

回复 15# Batcher


    大佬 怎么调用呀

TOP

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. set "dtmBegin=00:31:37:501"
  5. set "dtmEnd=14:59:02:999"
  6. for %%A in ("*.log") do (
  7.   >"%%A.log" call :filter "%%A"
  8.   REM >"[%dtmBegin::=;%-%dtmEnd::=;%].%%A" call :filter "%%A"
  9. )
  10. endlocal
  11. pause
  12. exit /b
  13. :filter
  14. set flag=0
  15. for /f "usebackq tokens=1*" %%B in (%1) do (
  16.     set dtm=0%%B
  17.     set dtm=!dtm:~-12!
  18.     REM test the low boundary
  19.     if "!flag!"=="0" (
  20.       if "!dtm!" geq "%dtmBegin%" set flag=1
  21.     )
  22.     REM test the high boundary
  23.     if "!flag!"=="1" (
  24.       if "!dtm!" lss "!dtmEnd!" (
  25.         echo %%B %%C
  26.       ) else (
  27.         set flag=0
  28.         goto next
  29.       )
  30.     )
  31.   )
  32.   :next
  33.   exit /b
复制代码
微信:flashercs
QQ:49908356

TOP

回复 18# w31575801


    请在顶楼提供一段日志文件(不是截图),我来写一下代码。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 20# Batcher


    已上传 Log日志格式跟这个一样的

TOP

回复 19# flashercs


    可以直接删掉时间段之前和之后的 比如直接删掉文件8:00之前,17:00之后,不生成新的Log 直接原Log里面修改吗?

TOP

回复 21# w31575801


截取 11:21:20.367 至 12:13:45.759 之间的内容:
  1. sed -n "/11:21:20\.367/,/12:13:45\.759/p" "1.log" > "2.log"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 qixiaobin0715 于 2020-11-25 13:17 编辑

如果会使用EmEditor文本编辑器的话,处理文本的宏文件如下:
  1. editor.ReplaceInFiles( "^00:00:00.001.*\\r\\n((?!09:34:04.989).*\\r\\n)+","",document.Path + "\\*.log", eeFindReplaceRegExp,eeEncodingSystemDefault,"","",eeExFindSeparateCRLF);
  2. editor.ReplaceInFiles( "^09:34:07.247.*\\r\\n(.*\\r\\n)+","",document.Path + "\\*.log", eeFindReplaceRegExp,eeEncodingSystemDefault,"","",eeExFindSeparateCRLF);
复制代码
使用方法:
1.将代码保存为编码为"UTF-16LE”的文件test.jsee。
2.在源文件所在文件夹中新建一个空的txt文件,用EmEditor打开空文件,加载宏文件test.jsee,运行宏文件,即能在源文件上直接修改。
3.第一组数字为首行时间;第二组为保留的开始时间;第三组为保留的终止时间的下一行记录时间。
4.注意备份源文件,加载宏文件后,符合条件的文件夹内的所有.log文件都会被修改。
5.若需要7点之后,9点之前的记录,第二组数字改为07,第三组数字改为09,数字格式应与源文件保持一致,小时数00,01,...10...的格式,不能写成0,1,...,前面的0不能省略。

TOP

本帖最后由 qixiaobin0715 于 2020-11-25 19:06 编辑

整点之间的记录要简单点,比如你所说的8~17点,test.jsee:
  1. editor.ReplaceInFiles( "^(0[0-7]|1[7-9]|2[0-3]):.*\\r\\n","",document.Path + "\\*.log", eeFindReplaceRegExp,eeEncodingSystemDefault,"","",eeExFindSeparateCRLF);
复制代码

TOP

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. set "dtmBegin=09:31:37:501"
  5. set "dtmEnd=14:59:02:999"
  6. set "file=~%random%~"
  7. for %%A in ("*.log") do (
  8.   >"%file%" call :filter "%%A"
  9.   move /y "%file%" "%%A"
  10.   REM >"[%dtmBegin::=;%-%dtmEnd::=;%].%%A" call :filter "%%A"
  11. )
  12. endlocal
  13. pause
  14. exit /b
  15. :filter
  16. set flag=0
  17. for /f "usebackq tokens=1*" %%B in (%1) do (
  18.     REM test the low boundary
  19.     if "!flag!"=="0" (
  20.       if "%%B" geq "%dtmBegin%" (
  21.           if "%%B" lss "%dtmEnd%" (
  22.             echo %%B %%C
  23.             set flag=1
  24.         ) else (
  25.           goto next
  26.         )
  27.       )
  28.     ) else (
  29.     REM test the high boundary
  30.       if "%%B" lss "%dtmEnd%" (
  31.         echo %%B %%C
  32.       ) else (
  33.         set flag=0
  34.         goto next
  35.       )
  36.     )
  37.   )
  38.   :next
  39.   exit /b
复制代码
回复 22# w31575801
微信:flashercs
QQ:49908356

TOP

本帖最后由 went 于 2020-11-25 15:30 编辑

start开始,end结束,相邻多个开始结束时间只会保存一个
  1. @echo off & cd /d "%~dp0"
  2. set "start=15:40:01.098"
  3. set "end=15:45:45.870"
  4. del *_NEW.log >nul 2>nul
  5. for %%i in ("*.log") do call :splitLog "%%i"
  6. pause&exit
  7. :splitLog
  8. set "start_line=0"
  9. for /f "delims=:" %%a in ('findstr /b /r /n /C:"%start%" "%~1"') do set "start_line=%%a"
  10. set /a "start_line-=1"
  11. if not "%start_line%"=="-1" (
  12. (
  13. for /f "usebackq skip=%start_line% tokens=1*" %%i in ("%~1") do (
  14. echo %%i %%j
  15. if "%%i"=="%end%" goto :done
  16. )
  17. ) > "%~n1_NEW.log"
  18. )
  19. :done
  20. echo %~1 done.
  21. echo -------------------------------------
复制代码
保存多个开始结束时间
  1. @echo off & cd /d "%~dp0"
  2. set "start=15:40:01.098"
  3. set "end=15:45:45.870"
  4. del *_NEW.log >nul 2>nul
  5. for %%i in ("*.log") do call :splitLog "%%i"
  6. pause&exit
  7. :splitLog
  8. set "start_line=0"
  9. for /f "delims=:" %%a in ('findstr /b /r /n /C:"%start%" "%~1"') do set "start_line=%%a" & goto :startDone
  10. :startDone
  11. set /a "start_line-=1"
  12. if not "%start_line%"=="-1" (
  13. (
  14. set "enterEnd=0"
  15. for /f "usebackq skip=%start_line% tokens=1*" %%i in ("%~1") do (
  16. if not "%%i"=="%end%" (
  17. call set /a "1/%%enterEnd%%" >nul 2>nul && goto :done || echo %%i %%j
  18. ) else (
  19. echo %%i %%j
  20. if "%%i"=="%end%" set "enterEnd=1"
  21. )
  22. )
  23. ) > "%~n1_NEW.log"
  24. )
  25. :done
  26. echo %~1 done.
  27. echo -------------------------------------
复制代码

TOP

回复 19# flashercs


  前面格式发错了 使用之后直接变成0KB 大佬再给改改

TOP

回复 26# flashercs


直接提示移动了一个文件 然后变成0KB了

TOP

回复 25# qixiaobin0715


   附件已上传 您再给看看  这个时间段怎么改

TOP

返回列表