找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25996|回复: 7

[文本处理] 【已解决】将一个文本里多个特定的字符串依次替换成另一个文本中列出的多行内容

[复制链接]
发表于 2016-10-28 16:03:16 | 显示全部楼层 |阅读模式
本帖最后由 6508as 于 2016-10-31 10:36 编辑

a.txt文件内容如下:
  TRACK 01 AUDIO
    TITLE "Track01"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Track02"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 04:04:51
    INDEX 01 04:06:51
  TRACK 03 AUDIO
    TITLE "Track03"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 08:51:11
    INDEX 01 08:53:11
  TRACK 04 AUDIO
    TITLE "Track04"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 13:43:47
    INDEX 01 13:45:47

b.txt文件内容如下:
01.第一首歌曲名
02.第二首歌曲名
03.第三首歌曲名
04.第四首歌曲名


要求:把a.txt里的 “Track01”   替换为 b.txt 里的  “01.第一首歌曲名”
         把a.txt里的 “Track02”   替换为 b.txt 里的  “02.第二首歌曲名”
         把a.txt里的 ”Track03”   替换为 b.txt 里的  “03.第三首歌曲名”
         把a.txt里的 “Track04”   替换为 b.txt 里的  “04.第四首歌曲名”


替换后的结果如下:
c.txt文件内容如下:
  TRACK 01 AUDIO
    TITLE "01.第一首歌曲名"
    PERFORMER "未知艺术家 "
    FLAGS DCP
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "02.第二首歌曲名"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 04:04:51
    INDEX 01 04:06:51
  TRACK 03 AUDIO
    TITLE "03.第三首歌曲名"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 08:51:11
    INDEX 01 08:53:11
  TRACK 04 AUDIO
    TITLE "04.第四首歌曲名"
    PERFORMER "未知艺术家"
    FLAGS DCP
    INDEX 00 13:43:47
    INDEX 01 13:45:47

不知道能否实现?看了一些贴,大多是替换某一字符的,
如果能实现还望高手们不吝赐教,谢谢!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2016-10-28 20:01:03 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('type "b.txt"') do set /a n+=1&set "#!n!=%%a"
  3. set n=0
  4. for /f "delims=" %%a in ('type "a.txt"') do (
  5.     set "str=%%a"
  6.     if "!str:TITLE=!" neq "!str!" (
  7.         set /a n+=1
  8.         if defined #!n! (
  9.             call echo;    TITLE "%%#!n!%%"
  10.         ) else echo;%%a
  11.     ) else echo;%%a
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
6508as + 1 乐于助人

查看全部评分

发表于 2016-10-28 20:01:49 | 显示全部楼层
本帖最后由 pcl_test 于 2016-10-28 22:00 编辑
  1. //&cls&cscript -nologo -e:jscript "%~f0"&pause&exit

  2. var fso=new ActiveXObject('Scripting.FileSystemObject'),b=[],n=0;
  3. var b=fso.OpenTextFile('b.txt',1).ReadAll().split(/[\r\n]+/);
  4. var a=fso.OpenTextFile('a.txt',1).ReadAll();
  5. var a=a.replace(/\b(TITLE\s*?)".*"/g,function($0,$1){
  6.     n++;
  7.     return b[n-1]?$1+'"'+b[n-1]+'"':$0;
  8. })
  9. WSH.echo(a);
复制代码

  1. rem win7及以上系统运行
  2. powershell -c "$n=0;$b=gc 'b.txt';gc 'a.txt'|%%{if($_ -match '^\s*?TITLE\s*?".*"'){if($b[$n]){$_ -replace '".*"\s*$',$b[$n];}else{$_};$n++;}else{$_}}"
  3. pause
复制代码
  1. rem 第三方http://www.bathome.net/s/tool/index.html?down&key=gawk
  2. gawk "NR==FNR{b[NR]=$0;next}/^\s*TITLE\s*".*"/{t++;if(b[t])sub(/".*"/,"\x22"b[t]"\x22")}1" "b.txt" "a.txt"
  3. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
6508as + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-10-28 20:45:50 | 显示全部楼层
本帖最后由 6508as 于 2016-10-31 10:42 编辑

非常感谢pcl_test版主的帮助!代码很好 祝事事顺心如意!!!

评分

参与人数 1PB -4 收起 理由
pcl_test -4 勿重复贴码

查看全部评分

发表于 2016-10-28 21:24:46 | 显示全部楼层
本帖最后由 WHY 于 2016-10-28 22:41 编辑

居然搞错了...
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (a.txt) do (
  3.     for /f %%j in ("%%i") do (
  4.         if "%%j" == "TITLE" (set "s=" & set /p "s=" & echo;  %%j "!s!") else echo;%%i
  5.     )
  6. ))<b.txt>c.txt
复制代码
发表于 2016-10-28 21:27:53 | 显示全部楼层
本帖最后由 WHY 于 2016-11-8 20:02 编辑
  1. set "s=[IO.File]::ReadAllText('a.txt', [Text.Encoding]::Default)"
  2. PowerShell -c "$a=type 'b.txt';[regex]::Replace(%s%, '(?im)(?<=^\s*TITLE\s+").*?(?=")',{$a[$global:i++]})"
复制代码
发表于 2016-10-28 21:32:14 | 显示全部楼层
  1. gawk "{if(match($0,/^(\s*TITLE\s+").*(")$/,a)){getline s<"b.txt";$0=a[1]s""a[2]}};1" a.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
6508as + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-10-28 22:54:00 | 显示全部楼层
本帖最后由 6508as 于 2016-10-31 10:51 编辑

非常感谢 WHY 热心及时的回答,在这里向您表示真心的感谢!祝您天天好心情!事事顺心!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:29 , Processed in 0.043363 second(s), 16 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表