返回列表 发帖

[文本处理] 批处理怎样替换多个文本中的部分内容?

写一个bat脚本,将bat脚本放到要执行的文件夹下,执行文件夹下有actors_list.txt,
    actors_list.txt内容为:
A.nfo|未知|张三
B.nfo|ABC|李四
C.nfo|大锤|王五
...
上边格式为:
要替换内容的文件的文件名|替换前的内容|替换后的内容

    我需要按照actors_list.txt将这个文件夹下的
    A.nfo文件(要根据actors_list.txt去找这个文件,因为文件名不是A.nfo,这里只是举例子用)内容中"未知"改为"张三",将B.nfo文件内容中"ABC"改为"李四",将C.nfo文件内容中"大锤"改为"王五"......
    A.nfo,B.nfo等nfo文件在bat所在文件夹下 或 子文件夹 或 子子文件夹下,不考虑重名。


    A.nfo内容为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
  <title>笑傲江湖</title>
  <actor>
    <name>未知</name>//注释:修改的地方在这里
    <type>Actor</type>
  </actor>
  <tag>笑傲江湖</tag>
  <genre>笑傲江湖</genre>
  <poster>https://xxx.com/aaa.jpg</poster>
  <cover>https://xxx.com/aaa.jpg</cover>
  <website>https://xxx.com/aaa.jpg</website>
</movie>
脚本执行后
A.nfo内容为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
  <title>笑傲江湖</title>
  <actor>
    <name>张三</name>//注释:修改的地方在这里
    <type>Actor</type>
  </actor>
  <tag>笑傲江湖</tag>
  <genre>笑傲江湖</genre>
  <poster>https://xxx.com/aaa.jpg</poster>
  <cover>https://xxx.com/aaa.jpg</cover>
  <website>https://xxx.com/aaa.jpg</website>
</movie>





需求进阶:如果比较麻烦的话只写上边那个就好了
如果有多个演员,比如

actors_list.txt内容为:
A.nfo|未知|张三|张四|张五
B.nfo|ABC|李四|李五
上边格式为:
要替换内容的文件的文件名|替换前的演员名|替换后的演员名1|替换后的演员名2|替换后的演员名3......

修改后
A.nfo内容为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
  <title>笑傲江湖</title>
  <actor>
    <name>张三</name>
    <type>Actor</type>
  </actor>
  <actor>
    <name>张四</name>
    <type>Actor</type>
  </actor>
  <actor>
    <name>张五</name>
    <type>Actor</type>
  </actor>
  <poster>https://xxx.com/aaa.jpg</poster>
  <cover>https://xxx.com/aaa.jpg</cover>
  <website>https://xxx.com/aaa.jpg</website>
</movie>

找AI改了一上午都不行。。。

TOP

本帖最后由 aloha20200628 于 2025-4-13 19:56 编辑

回复 1# cckkaa888

假设当前目录下的 actors_list.txt 及其子目录中的 a.nfo,b.nfo,... 均为 utf-8 编码文件,则将以下代码存为 test.bat,且用 utf-8 编码存盘,在当前目录下运行...
如果 actors_list.txt,a.nfo,b.nfo,... 均为 ansi 即简中编码文件,则将以下代码用 ansi 即简中编码存盘,且须将代码第一行中的 65001 改为 936
@echo off &chcp 65001>nul &setlocal enabledelayedexpansion
for /f "tokens=1,2* delims=|" %%A in (actors_list.txt) do (
   set "b=%%B" &set "c=%%C" &set "n=0"
   for %%x in (!c:^|^=;!) do (set/a "n+=1"&set "_#!n!=%%x")
   set "n=0" &for /f "delims=" %%F in ('dir/b/s/a-d "%%A" ') do (for /f "usebackq delims=" %%a in ("%%F") do (
      set "a=%%a"
      if "!a!"=="!a:>%%B<=!" (echo,!a!) else set/a "n+=1"&for /f "tokens=2 delims==" %%v in ('set _#!n!') do (echo,!a:%%B=%%v!)
   ))>"%%A.new"
)
pause&exit/bCOPY

TOP

回复 3# aloha20200628


    可能我写的那里不太好,让大佬理解错了,我修改了一下,麻烦再给看下

TOP

回复 4# cckkaa888

一楼代码已订正,处理结果文件均存于批处脚本所在目录中,扩展名为 *.new

TOP

回复 5# aloha20200628


    感谢大佬,大佬真

TOP

返回列表