标题: [文件操作] 批处理替换文件内容,怎么将变量写入文本文件特定行? [打印本页]
作者: hehening88 时间: 2012-6-30 15:51 标题: 批处理替换文件内容,怎么将变量写入文本文件特定行?
测试文本文件1111.txt内容如下:
111111111
111"222"111
111111111
444444444
fgjjllkugf
目的是将第二行双引号中的222替换成8888888
替换结果如下:
111111111
111"88888888"111
111111111
444444444
fgjjllkugf
批处理代码如下:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type "1111.txt"^|find /n "222"') do
- set str=%%a
- for /f tokens^=1-2*delims^=^" %%i in ("%str%") do (
- set substr=%%j
- set replace=888888888
- echo !substr!
- call set "str=%%str:!substr!=!replace!%%"
- echo !str!>>1111.txt
- )
- pause
复制代码
但执行结果确实将解析替换好的字符串111"888888888"111写到了文件最后一行
我觉得语句for /f "delims=" %%a in ('type "1111.txt"^|find /n "222"')是按行执行的,到文件第二行时发现字符串“222”,在执行到第三行之前,执行后面所有的语句,改成下面这样反而出现了语法错误,结果一闪就消失了- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type "1111.txt"^|find /n "222"') do
- (
- set str=%%a
- for /f tokens^=1-2*delims^=^" %%i in ("%str%") do (
- set substr=%%j
- set replace=888888888
- echo !substr!
- call set "str=%%str:!substr!=!replace!%%"
- echo !str!>>1111.txt
- )
- )
- pause
复制代码
前辈帮帮忙!能让最后这个变量echo !str!把原文本第二行替换掉
作者: weichenxiehou 时间: 2012-6-30 16:44
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (test.txt) do (
- set "str=%%a"
- for /f tokens^=1-2*delims^=^" %%i in ("!str!") do (
- if "%%j"=="222" (
- set substr=%%j
- set replace=888888888
- call set "str=%%str:!substr!=!replace!%%"
- )
- echo !str!
- )
- )
- pause
复制代码
作者: apang 时间: 2012-7-1 11:24
- @echo off
- for /f "delims=" %%a in (1111.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- set str=!str:"222"="888888"!
- echo,!str!
- endlocal
- )
- pause
复制代码
作者: hehening88 时间: 2012-7-1 15:28
回复 2# weichenxiehou
前辈你好,你把我得问题看简单了if(“%%j”==“222”)这个判断不可能有,因为222只是我举得一个列子,你的想法是第一个for循环遍历每一行,通过if判断确定对第二行操作是吧,但这个if判断不能有if里面等号右边是什么不可知还有您最后一句echo !str!是写在文本文件操作的那一行而不是在屏幕上输出吗?
还有我用type “1111.txt"^|find "222"在文本中找到了这一行,我怎么把整个找到的这行返回给一个变量呢
作者: weichenxiehou 时间: 2012-7-1 15:43
本帖最后由 weichenxiehou 于 2012-7-1 15:55 编辑
你的意思是“将所有行中引号之间的内容替换为888888888”吗?- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (test.txt) do (
- set "str=%%a"
- for /f tokens^=1-2*delims^=^" %%i in ("%%a") do (
- if not "%%j"=="" set "str=%%i"888888888"%%k"
- )
- echo,!str!
- )>result.txt
- pause
复制代码
没有定位到文本只是方便测试而已,在屏幕上看比打开文件核对更快。
最后一个问题:- for /f "delims=" %%i in ('type "1111.txt"^|find "222"') do set "var=%%i"
复制代码
作者: powerbat 时间: 2012-7-1 17:47
- @set @n=0//& cscript.exe -e:jscript "%~f0" &pause&exit/b
- fso = new ActiveXObject("Scripting.FileSystemObject");
- s = fso.OpenTextFile("1.txt").ReadAll();
- s = s.replace(/"[^"\r\n]+"/g, '"88888888"');
- fso.OpenTextFile("2.txt",2,true).write(s);
复制代码
作者: Hello123World 时间: 2012-8-8 15:59
假设药替换的文本是1.txt。- sed 's/"222"/"88888888"/' 1.txt>new1.txt
复制代码
需要下载sed.exe到c:\windows\system32文件夹中。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |