[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理脚本怎样替换指定位置的字符串?

例如原脚本:
<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"  这里。

请大神们帮帮忙啊!

纯批的话或许可以这样:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "s=%%i"
  4.     if "!s: target=!" NEQ "!s!" (
  5.         if "!s: URL=!" NEQ "!s!" (
  6.             for /f tokens^=1-5delims^=^" %%a in ("%%i") do (
  7.                 echo,%%a"%%~nd"%%c"%%d"%%e
  8.             )
  9.         ) else echo,%%i
  10.     ) else echo,%%i
  11. )
  12. pause
复制代码

TOP

本帖最后由 apang 于 2014-10-19 14:55 编辑

也可以这样:
  1. @set @n=0;//&cscript -nologo -e:jscript "%~0"<a.txt>b.txt & pause & exit
  2. s = WScript.StdIn.ReadAll();
  3. s = s.replace(/( target=").*?(" +URL=".*?([^\/]+)\.html")/ig,"$1$3$2");
  4. WScript.StdOut.Write(s)
复制代码
1

评分人数

TOP

本帖最后由 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

TOP

本帖最后由 apang 于 2014-10-23 19:29 编辑

回复 4# wxdboiled


    保存为Test.js,试下
  1. fso = new ActiveXObject("Scripting.FileSystemObject");
  2. a = fso.OpenTextFile("filea.txt").ReadAll();
  3. b = fso.OpenTextFile("fileb.txt").ReadAll();
  4. a = a.replace(/( target=")(.*?)(" +URL=".*?([^/]+)\.html")/ig,
  5.         function(s0, s1, s2, s3, s4) {
  6.                 re = new RegExp(s1 + s2 + '"', "ig");
  7.                 b = b.replace(re, s1 + s4 + '"');
  8.                 return s1 + s4 + s3
  9.         }
  10. )
  11. fso.OpenTextFile("New_filea.txt", 2, true).Write(a)
  12. fso.OpenTextFile("New_fileb.txt", 2, true).Write(b)
复制代码

TOP

回复 5# apang


    果然厉害!完全可以达到目标!多谢了!

TOP

返回列表