标题: [文本处理] (已解决)求助批处理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 编辑
- @echo off
- 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!&© /y "d:\123\config_del.ini" "d:\456\"&&echo %%a----%%b----%%c----!ss!----%%e----%%f----%%g----%%h----%%i----%%j----%%k>>ss.ini
- move /y ss.ini "d:\123\config_del.ini"
- rem 为避免同一错误反复被检测到,会替换原文。上面是发现新错一直拷贝文件,前面的错误被丢失。下面是发现错误后把错误追加进错误记录
- 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
- move /y ss.ini "d:\123\config_del.ini"
- ping /n 10 127.1>nul
- goto %0
复制代码
作者: linlianboy 时间: 2023-1-14 07:01
回复 3# hlzj88
您好,是检测到有异常标志就直接复制过去,后面10分钟检测一次,发现ini文件内又出现其他的异常标志,就继续把这个ini覆盖之前复制过去的那个
作者: terse 时间: 2023-1-14 14:24
简洁的写法能满足不- @echo off
- md "D:\456\" 2>nul
- cd /d "D:\123\"
- :start
- for /f "tokens=4 delims=----" %%i in (config_del.ini) do (
- for /f "delims=0123456789" %%i in ("%%i") do copy "config_del.ini" "d:\456\" >nul
- )
- ping /n 5 127.1>nul
- 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 ),可用如下脚本实现:- @echo off
- rem 保存为ANSI编码格式
- md "D:\456\" 2>nul
- cd /d "D:\123\"
- set/a LN=0
- :start
- for /f %%a in ('gawk -vLN^=^%LN^% "FNR>LN{if($0~/----[0-9]{8}[a-z]----/)print FNR}" config_del.ini') do (
- set/a LN=%%a
- copy /y "config_del.ini" "D:\456\" >nul
- )
- goto start
复制代码
注意,config_del.ini 必须为编码格式
作者: terse 时间: 2023-1-15 21:37
回复 7# linlianboy
试试呢- @echo off
- md "D:\456\" 2>nul
- cd /d "D:\123\"
- :start
- for /f "tokens=4 delims=----" %%i in (config_del.ini) do (
- for /f "delims=0123456789" %%i in ("%%i") do (
- if not defined _%%i copy "config_del.ini" "d:\456\" >nul
- set _%%i=1
- )
- )
- ping /n 600 127.1>nul
- 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 |