标题: [文本处理] 批处理脚本怎样替换指定位置的字符串? [打印本页]
作者: wxdboiled 时间: 2014-10-18 16:11 标题: 批处理脚本怎样替换指定位置的字符串?
例如原脚本:
<map version="1.0">
<mapID target="dir_open_icon" URL="dir/open/icon.html"/>
<mapID target="Platform_copy_topics" URL="Platform/copy_topics.html"/>
<mapID target="NAS_ISM_help_network_ldap_manager" URL="NAS/ISM_help/network_ldap_manager.html"/>
</map>
想要替换成
<map version="1.0">
<mapID target="icon" URL="dir/open/icon.html"/>
<mapID target="copy_topics" URL="Platform/copy_topics.html"/>
<mapID target="network_ldap_manager" URL="NAS/ISM_help/network_ldap_manager.html"/>
</map>
即:把URL部分后面.html前面的那段字符xxx,替换到本行target="xxx" 这里。
请大神们帮帮忙啊!
作者: apang 时间: 2014-10-19 10:54
纯批的话或许可以这样:- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- set "s=%%i"
- if "!s: target=!" NEQ "!s!" (
- if "!s: URL=!" NEQ "!s!" (
- for /f tokens^=1-5delims^=^" %%a in ("%%i") do (
- echo,%%a"%%~nd"%%c"%%d"%%e
- )
- ) else echo,%%i
- ) else echo,%%i
- )
- pause
复制代码
作者: apang 时间: 2014-10-19 10:58
本帖最后由 apang 于 2014-10-19 14:55 编辑
也可以这样:- @set @n=0;//&cscript -nologo -e:jscript "%~0"<a.txt>b.txt & pause & exit
-
- s = WScript.StdIn.ReadAll();
- s = s.replace(/( target=").*?(" +URL=".*?([^\/]+)\.html")/ig,"$1$3$2");
- WScript.StdOut.Write(s)
复制代码
作者: wxdboiled 时间: 2014-10-22 20:17
本帖最后由 wxdboiled 于 2014-10-22 21:41 编辑
回复 2# apang
不好意思,前面都在忙,能不能再写一下如何把这个再优化下同时修改2个文件
filea
<map version="1.0">
<mapID target="dir_open_icon" URL="dir/open/icon.html"/>
<mapID target="Platform_copy_topics" URL="Platform/copy_topics.html"/>
<mapID target="NAS_ISM_help_network_ldap_manager" URL="NAS/ISM_help/network_ldap_manager.html"/>
</map>
fileb
<tocitem text="Settings" target="dir_open_icon"/>
<tocitem text="Settings" target="Platform_copy_topics"/>
<tocitem text="Settings" target="NAS_ISM_help_network_ldap_manager"/>
fileb 的target=""替换成filea一样的
求助@apang
作者: apang 时间: 2014-10-23 19:28
本帖最后由 apang 于 2014-10-23 19:29 编辑
回复 4# wxdboiled
保存为Test.js,试下- fso = new ActiveXObject("Scripting.FileSystemObject");
- a = fso.OpenTextFile("filea.txt").ReadAll();
- b = fso.OpenTextFile("fileb.txt").ReadAll();
- a = a.replace(/( target=")(.*?)(" +URL=".*?([^/]+)\.html")/ig,
- function(s0, s1, s2, s3, s4) {
- re = new RegExp(s1 + s2 + '"', "ig");
- b = b.replace(re, s1 + s4 + '"');
- return s1 + s4 + s3
- }
- )
-
- fso.OpenTextFile("New_filea.txt", 2, true).Write(a)
- fso.OpenTextFile("New_fileb.txt", 2, true).Write(b)
复制代码
作者: wxdboiled 时间: 2014-10-24 21:33
回复 5# apang
果然厉害!完全可以达到目标!多谢了!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |