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

[文本处理] 批处理如何搜索日志中的关键字并锁屏?

[复制链接]
发表于 2013-9-16 19:00:17 | 显示全部楼层 |阅读模式
有个软件在每天会产生很多LOG文件(TXT文本格式),在文本里面会有DONE或者ERROR表示成功或者失败:

如何用批处理进行文本的搜索如果是有ERROR的复制一份到桌面并且对本机进行锁屏操作。是否这样可以用批处理实现?
 楼主| 发表于 2013-9-16 21:21:13 | 显示全部楼层
没有人能教教我吗?
发表于 2013-9-16 21:31:49 | 显示全部楼层
  1. @echo off
  2. if exist "%userprofile%\Desktop" (
  3.     set "mydesk=%userprofile%\Desktop"
  4. ) else if exist "%userprofile%\桌面" (
  5.     set "mydesk=%userprofile%\Desktop"
  6. ) else (
  7.     echo 找不到桌面的位置
  8. )
  9. for /f "delims=" %%i in ('findstr /m "ERROR" *.log') do (
  10.     copy /y "%%i" %mydesk%
  11. )
  12. pause
复制代码
 楼主| 发表于 2013-9-17 10:07:26 | 显示全部楼层
谢谢老大慷慨赐教 但是还有一个问题 我何如能在搜索到错误信息时锁定本机呢?
 楼主| 发表于 2013-9-17 11:17:07 | 显示全部楼层
还有一个问题 在XP下运行会出现语法错误 是怎么回事呢
发表于 2013-9-17 11:21:48 | 显示全部楼层
修改3楼的:
  1. @echo off
  2. if exist "%userprofile%\Desktop" (
  3.     set "mydesk=%userprofile%\Desktop"
  4. ) else (
  5.     if exist "%userprofile%\桌面" (
  6.         set "mydesk=%userprofile%\桌面"
  7.     ) else echo 找不到桌面的位置
  8. )

  9. for /f "delims=" %%i in ('findstr /m "ERROR" *.log') do (
  10.     copy /y "%%i" "%mydesk%"
  11. )
  12. rundll32.exe user32.dll,LockWorkStation
复制代码
 楼主| 发表于 2013-9-17 11:49:07 | 显示全部楼层
完美运行 谢谢2位高手的帮忙
发表于 2013-9-17 12:41:07 | 显示全部楼层
回复 7# lion991128


    6楼的代码在搜索不到错误信息的情况下也会锁屏,你试试。
发表于 2013-9-17 12:41:56 | 显示全部楼层
回复 5# lion991128


    不管什么时候,请把报错信息贴出来,否则大家没有办法继续帮助你。
 楼主| 发表于 2013-9-18 11:29:58 | 显示全部楼层
Date;2013-06-11;09:15:48
Product-Sequence;Melco;Calibration_Test_FAST
PartNumber-SerialNumber;783801-0029;QF0464S
TestTime;29.24;sec
Result-Error-Description;Failed;75;Range OUT of Limits
Start Calibration Mode;;;Exp;OK;Meas;OK;/;1;/assed;0
Initialization Value Mem;;;Exp;01;Meas;01;/;;;Passed;0
Initialization Value Check;;;Exp;01;Meas;01;/;;;Passed;0
Range Temp;Min;360;Max;440;Meas;408;bit;;;Passed;0
Communication Speed;;;;;Meas;250;/;;;Passed;0
CAN_NML_SND;;;;;Meas;18FF1002;/;;;Passed;0
CAN_NML_REC;;;;;Meas;18FF1000;/;;;Passed;0
Range;;;;;Meas;408;bit;;;Passed;0
Range;;;;;Meas;408;bit;;;Passed;0
Range;;;;;Meas;408;bit;;;Passed;0
Sweep Time;Min;500;Max;3000;Meas;1495;msec;;;Passed;0
FOHS;;;;;Meas;2;bit;;;Passed;0
Screw FOHS Position;Min;13;Max;15;Meas;13;bit;;;Passed;0
Recheck Screw FOHS Position;Min;13;Max;15;Meas;12;bit;;;Failed;75

这个是错误信息

Date;2013-06-11;07:11:47
Product-Sequence;Melco;Calibration_Test_FAST
PartNumber-SerialNumber;783801-0029;QF0410S
TestTime;133.72;sec
Result-Error-Description;Passed;0;
Start Calibration Mode;;;Exp;OK;Meas;OK;/;1;/;Passed;0
Initialization Value Mem;;;Exp;01;Meas;01;/;;;Passed;0
Initialization Value Check;;;Exp;01;Meas;01;/;;;Passed;0
Range Temp;Min;360;Max;440;Meas;411;bit;;;Passed;0
Communication Speed;;;;;Meas;250;/;;;Passed;0
CAN_NML_SND;;;;;Meas;18FF1002;/;;;Passed;0
CAN_NML_REC;;;;;Meas;18FF1000;/;;;Passed;0
Range;;;;;Meas;411;bit;;;Passed;0

以上是成功的信息
 楼主| 发表于 2013-9-18 11:34:06 | 显示全部楼层
回复 8# DAIC

这位老兄真细心 是有这个问题存在,而且还有一个问题就是如果以前的错误信息也会在判定成功失败的时候认为是现在出现的失败。

是否能达到进行一个差备的比较或者是能根据系统时间去认证只在今天产生的LOG中是否有错误存在?
发表于 2013-9-18 13:46:30 | 显示全部楼层
本帖最后由 terse 于 2013-9-18 13:49 编辑

这样行不
  1. @echo off
  2. set "flag="
  3. set reg=reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
  4. for /f "skip=4 tokens=2*" %%i in ('%reg% /v "desktop"') do set "desktop=%%j"
  5. for /f "delims=" %%i in ('findstr /im "%date:~,10%" *.log') do (
  6.         findstr /im ERROR "%%i" >nul && (
  7.                 copy "%%i" "%desktop%"
  8.                 set flag=rundll32.exe user32.dll,LockWorkStation
  9.         )
  10. )
  11. %flag%
复制代码
 楼主| 发表于 2013-9-18 16:38:38 | 显示全部楼层
这样行不
terse 发表于 2013-9-18 13:46


%date:~ 的这里是取系统时间的值吗?但是生成的LOG并不是标准的时间格式:783801-0029_QF0464S_20130611_091548.txt 例如这样的名字 红色的地方是标识日期的这个如何识别啊?
发表于 2013-9-18 18:44:31 | 显示全部楼层
本帖最后由 terse 于 2013-9-23 14:07 编辑

回复 13# lion991128
文件名含当天日期
  1. @echo off
  2. set "flag="
  3. set reg=reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
  4. set dt=%date:~,10%
  5. for /f "skip=4 tokens=2*" %%i in ('%reg% /v "desktop"') do (
  6.         for /f "tokens=*" %%k in ("%%j") do set "desktop=%%k"
  7. )
  8. for /f "delims=" %%i in ('findstr /im "ERROR" *.log^|findstr "%dt:-=-*%"') do (
  9.         copy "%%i" "%desktop%"
  10.         set flag=rundll32.exe user32.dll,LockWorkStation   
  11. )
  12. %flag%
  13. pause
复制代码
文件内容含当天日期
  1. @echo off
  2. set "flag="
  3. set reg=reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
  4. set dt=%date:~,10%
  5. for /f "skip=4 tokens=2*" %%i in ('%reg% /v "desktop"') do (
  6.         for /f "tokens=*" %%k in ("%%j") do set "desktop=%%k"
  7. )

  8. for /f "delims=" %%i in ('findstr /im "%dt:-=-*%" *.log') do (
  9.         findstr /im ERROR "%%i" >nul && (
  10.                 copy "%%i" "%desktop%"
  11.                 set flag=rundll32.exe user32.dll,LockWorkStation
  12.         )
  13. )
  14. %flag%
  15. pause
复制代码
当天日期文件

  1. @echo off
  2. set "flag="
  3. set reg=reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
  4. for /f "skip=4 tokens=2*" %%i in ('%reg% /v "desktop"') do (
  5.         for /f "tokens=*" %%k in ("%%j") do set "desktop=%%k"
  6. )
  7. for /f "delims=" %%i in ('findstr /im "ERROR" *.log') do (
  8.     for /f %%j in ("%%~ti") do (
  9.         if /i "%%j" == "%date:~,10%" (
  10.            copy "%%i" "%desktop%"
  11.            set flag=rundll32.exe user32.dll,LockWorkStation
  12.         )
  13.     )   
  14. )
  15. %flag%
  16. pause
复制代码
 楼主| 发表于 2013-9-22 10:10:10 | 显示全部楼层
回复 14# terse


  回大大 这个运行说是语法错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 16:03 , Processed in 0.018414 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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