初始文本如下
123321
123333
454
!!@#$%^&*()
454
;compiler time
;;;;;;;;;;
需求
指定字符串是;compiler time
需要在这个字符串的下一行进行数据替换,并且保留一切空格,换行等特殊符号
如第一次执行批处理文件之后
123321
123333
454
!!@#$%^&*()
454
;compiler time
20160629120030
;;;;;;;;;;
第二次执行批处理文件之后
123321
123333
454
!!@#$%^&*()
454
;compiler time
20160629123000
;;;;;;;;;;
替换的文本为时间戳,自己试着弄了一下,该部分已经实现。
目前的代码的问题就是随着执行次数会不断的插入时间戳,而不是替换效果。
要求时间戳随着执行批处理后替换更新,而不是增加一行。
自己的弄的代码执行两次后如下
123321
123333
454
!!@#$%^&*()
454
;compiler time
20160629131619
20160629131614
;;;;;;;;;;
文本附上
[attach]9891[/attach]
折腾了好几天都不知道怎么弄,虽然sed可以实现。可是要求不能使用外部程序。
希望有大神解救!感谢!
---------------------------UPDATE
东拼西凑了一段还是算是解决了。。。
可是这个code每次使用的时候会覆盖掉;compiler time这一行,无法在这一行后面添加字段。这无法解- @echo off & setlocal enabledelayedexpansion
- set "s=&echo;"
- set fn=123\rambin.nvr
- set times=%TIME:~0,2%
- set zero=0
- if %times% LSS 10 (set times=%zero%%TIME:~1,2%) else (set times=%TIME:~0,2%)
- set alltimes=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%times:~0,2%%TIME:~3,2%%TIME:~6,2%
- for /f "delims=:" %%a in ('findstr /n ";compiler time" %fn%') do set n=%%a
- set /a n+=1
- (for /f "tokens=1,* delims=:" %%i in ('findstr /n ".*" %fn%') do if not %%i equ %n% echo.%%j)>"temp.txt"
- move /y temp.txt "%fn%"
- (for /f "delims=" %%a in ('findstr /n .* "%fn%"') do (
- for /f "tokens=1* delims=:" %%b in ("%%a")do (
- set "str=%%c"
- if "!str:~1,13!" == "compiler time" ( echo ;compiler time%s%%alltimes% ) else (echo,%%c)
- )))>"temp.txt"
- move /y temp.txt "%fn%"
- :pause
复制代码
|