标题: [文本处理] 批处理如何实现对指定字符串所在行的下一行内容进行替换? [打印本页]
作者: ridora 时间: 2016-6-29 13:21 标题: 批处理如何实现对指定字符串所在行的下一行内容进行替换?
初始文本如下
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
复制代码
作者: WHY 时间: 2016-6-29 18:37
- @echo off
-
- for /f %%i in ('wmic os get LocalDateTime ^| findstr [0-9]') do set "dt=%%~ni"
-
- for /f "delims=" %%i in ('findstr /n .* a.txt') do (
- set "当前行=%%i"
- setlocal enabledelayedexpansion
- set "当前行=!当前行:*:=!"
- set "上一行=!上一行:*:=!"
- if /i "!上一行!" == ";compiler time" (echo;%dt%) else (echo;!当前行!)
- endlocal
- set "上一行=%%i"
- )
- pause
复制代码
作者: pcl_test 时间: 2016-6-30 20:50
本帖最后由 pcl_test 于 2016-6-30 20:52 编辑
- //&cls&cscript -nologo -e:jscript "%~f0" "文本.txt"&pause&exit
- function Add(i){return i<10?"0"+i:i;}
- var now = new Date();
- var dt = now.getFullYear()+Add((now.getMonth()+1))+
- Add(now.getDate())+
- Add(now.getHours())+
- Add(now.getMinutes())+
- Add(now.getSeconds());
- var str = ';compiler time'; //指定字符串
- var fso = new ActiveXObject('Scripting.Filesystemobject');
- var file = WSH.Arguments(0);
- var f = fso.OpenTextFile(file, 1);
- var i=0, txt='';
- while(!f.AtEndOfStream){
- var line = f.Readline();
- i++;
- if(i == t)continue;
- if(line.indexOf(str) >-1){
- txt += line+'\r\n'+dt+'\r\n';
- var t = i+1;
- }else{
- txt += line+'\r\n';
- }
- }
- f.Close();
- fso.OpenTextFile(file, 2).Write(txt);
- WSH.echo('Done');
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |