Board logo

标题: [文本处理] (已解决)求助批处理ini文本实时检测内容 [打印本页]

作者: linlianboy    时间: 2023-1-13 22:41     标题: (已解决)求助批处理ini文本实时检测内容

本帖最后由 linlianboy 于 2023-1-18 22:29 编辑

D\123\config_del.ini这个文件内运行一段时间就会写入异常标志,请问各位有没有办法实时检测这个文件,当出现异常时就将该文件拷贝至D:\456\目录下,后续的实时检测中再检测到异常标志就覆盖
以下为config_del.ini内的内容,第六行的20230111a就是出现的异常标志(异常标志为a-z),如果该ini文件内日期这一列没有出现异常标志就不拷贝至D:\456\目录下(除第六行外,其他行都是正常的数据)
num--1--
游戏路径=C:\Program Files\游戏\11.exe
lebaoshi00----asdasd123456789----1----20230111----0----1----3----1----2----0----0
lebaoshi11----asdasd123456789----1----20230111----0----1----3----1----2----0----0
lebaoshi22----asdasd123456789----1----20230111----0----1----3----1----2----0----0
lebaoshi33----asdasd123456789----1----20230111a----0----1----3----1----2----0----0
lebaoshi44----asdasd123456789----1----20230111----0----1----3----1----2----0----0
lebaoshi55----asdasd123456789----1----20230111----0----1----3----1----2----0----0
lebaoshi66----asdasd123456789----1----20230111----0----1----3----1----2----0----0
lebaoshi77----asdasd123456789----1----20230111----0----1----3----1----2----0----0
lebaoshi88----asdasd123456789----1----20230111----0----1----3----1----2----0----0
baoleshi00----asdasd123456789----1----20230111----0----1----3----1----2----0----0
songzhongtian01----bb123456----1----20230111----0----1----3----1----1----0----0
songzhongtian02----bb123456----1----20230111----0----1----3----1----1----0----0
songzhongtian03----bb123456----1----20230111----0----1----3----1----1----0----0
songzhongtian04----bb123456----1----20230111----0----1----3----1----1----0----0
songzhongtian05----bb123456----1----20230111----0----1----3----1----1----0----0
wanchengdao01----bb123456----1----20230111----0----1----3----1----1----0----0
wanchengdao02----bb123456----1----20230111----0----1----3----1----1----0----0
wanchengdao03----bb123456----1----20230110----0----1----3----1----1----0----0
wanchengdao04----bb123456----1----20230110----0----1----3----1----1----0----0
wanchengdao05----bb123456----1----20230110----0----1----3----1----1----0----0
作者: hlzj88    时间: 2023-1-13 23:33

本帖最后由 hlzj88 于 2023-1-13 23:34 编辑

这个文件检测是容易的,问题是,检测到后,是否可以替换原文内容,如不允许替换,这个错误一直存在,会一直检测到,然后一直在复制文件。   还有,如果文件内容替换了,系统是不是允许用修改后的文件替换原文件,这个需要实际替换才可以知道。    还有,检测以什么样的频度来判断,一直循环,还是隔10分钟。
作者: hlzj88    时间: 2023-1-14 00:01

本帖最后由 hlzj88 于 2023-1-14 00:02 编辑
  1. @echo off
  2. for /f "tokens=1-11 delims=-" %%a in ("d:\123\config_del.ini") do set /a js=%%d+5&&findstr /i "%%a" "d:\123\config_del.ini">>ss.ini || set js=%%d&&set js=!js~0,-1!&&copy /y "d:\123\config_del.ini" "d:\456\"&&echo %%a----%%b----%%c----!ss!----%%e----%%f----%%g----%%h----%%i----%%j----%%k>>ss.ini
  3. move /y ss.ini "d:\123\config_del.ini"
  4. rem 为避免同一错误反复被检测到,会替换原文。上面是发现新错一直拷贝文件,前面的错误被丢失。下面是发现错误后把错误追加进错误记录
  5. for /f "tokens=1-11 delims=-" %%a in ("d:\123\config_del.ini") do set /a js=%%d+5&&findstr /i "%%a" "d:\123\config_del.ini">>ss.ini || findstr /i "%%a" "d:\123\config_del.ini">>d:\456\错误记录.txt&&set js=%%d&&set js=!js~0,-1!&&echo %%a----%%b----%%c----!ss!----%%e----%%f----%%g----%%h----%%i----%%j----%%k>>ss.ini
  6. move /y ss.ini "d:\123\config_del.ini"
  7. ping /n 10 127.1>nul
  8. goto %0
复制代码

作者: linlianboy    时间: 2023-1-14 07:01

回复 3# hlzj88


    您好,是检测到有异常标志就直接复制过去,后面10分钟检测一次,发现ini文件内又出现其他的异常标志,就继续把这个ini覆盖之前复制过去的那个
作者: terse    时间: 2023-1-14 14:24

简洁的写法能满足不
  1. @echo off
  2. md "D:\456\" 2>nul
  3. cd /d "D:\123\"
  4. :start
  5. for /f "tokens=4 delims=----" %%i in (config_del.ini) do (
  6.      for /f "delims=0123456789" %%i in ("%%i") do copy "config_del.ini" "d:\456\" >nul
  7. )
  8. ping /n 5 127.1>nul
  9. goto start
复制代码

作者: linlianboy    时间: 2023-1-14 21:13

回复 5# terse


    非常感谢使用您的代码后已经可以了
作者: linlianboy    时间: 2023-1-15 07:43

回复 5# terse


    您好,经过昨晚的测试,当D:\123\config_del.ini里面出现异常标志(无新增),会一直循环覆盖到d:\456\目录下

请问,当D:\123\config_del.ini出现异常标识且无新增异常标识时循环不再做覆盖拷贝吗?只有D:\123\config_del.ini出现首次出现异常标识和新增异常标识后再拷贝覆盖
作者: linlianboy    时间: 2023-1-15 07:55

回复 3# hlzj88


    您好,使用了您的代码后会将d:\123\config_del.ini内的内容全部清空,然后d:\456\目录中会出现config_del.ini(有内容)和一个错误记录(无内容)
作者: hfxiang    时间: 2023-1-15 11:57

本帖最后由 hfxiang 于 2023-1-15 12:23 编辑

如不介意第3方式工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),可用如下脚本实现:
  1. @echo off
  2. rem 保存为ANSI编码格式
  3. md "D:\456\" 2>nul
  4. cd /d "D:\123\"
  5. set/a LN=0
  6. :start
  7. for /f %%a in ('gawk -vLN^=^%LN^% "FNR>LN{if($0~/----[0-9]{8}[a-z]----/)print FNR}" config_del.ini') do (
  8. set/a LN=%%a
  9. copy /y "config_del.ini" "D:\456\" >nul
  10. )
  11. goto start
复制代码
注意,config_del.ini 必须为编码格式
作者: terse    时间: 2023-1-15 21:37

回复 7# linlianboy
试试呢
  1. @echo off
  2. md "D:\456\" 2>nul
  3. cd /d "D:\123\"
  4. :start
  5. for /f "tokens=4 delims=----" %%i in (config_del.ini) do (
  6.      for /f "delims=0123456789" %%i in ("%%i") do (
  7.           if not defined _%%i copy "config_del.ini" "d:\456\" >nul
  8.           set _%%i=1
  9.      )
  10. )
  11. ping /n 600 127.1>nul
  12. goto start
复制代码

作者: hlzj88    时间: 2023-1-17 20:56

本帖最后由 hlzj88 于 2023-1-17 20:58 编辑

回复 8# linlianboy

刚看到消息,,代码是测试过的。。可能是系统不同,需要针对系统进行微调。
因为考虑到两种情况,便于你取舍,把两种方式放在一个bat内,也许是他们运行后导致的结果。可以尝试分别用一个语句执行。
作者: linlianboy    时间: 2023-1-18 22:29

回复 10# terse


    已成功,谢谢您
作者: linlianboy    时间: 2023-1-18 22:29

回复 11# hlzj88


    好的,谢谢您
作者: linlianboy    时间: 2023-1-18 22:29

回复 9# hfxiang


    可以使用,成功,谢谢您




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