Board logo

标题: [文本处理] 请教根据A文件替换B文件批处理能实现吗? [打印本页]

作者: sodawater    时间: 2022-5-20 23:14     标题: 请教根据A文件替换B文件批处理能实现吗?

我现在需要将 A.txt里面的 ID 和 名称 "1        短剑"替换到 B.xml 里面 相同ID  后面的name英文名称,例如替换以后是这样<weapon id="1" name="短剑">,请教大佬们批处理应该怎么写呢?

A.txt
ID    名称
1        短剑
2        长剑
3        宽剑
4        木棒
5        钉锤
6        见习生法杖
7        见习生之杖
8        柳木魔杖
9        柏木魔杖
10        匕首
11        骨制匕首
12        小刀
13        短弓
14        弓
15        短矛
16        长矛


B.xml 文件内容
        <weapon id="1" name="Short Sword">
                <set name="crystal_type" value="NONE"/>
                <set name="icon" value="icon.weapon_small_sword_i00"/>
                <set name="price" value="590"/>
                <set name="rnd_dam" value="10"/>
                <set name="soulshots" value="1"/>
                <set name="spiritshots" value="1"/>
                <set name="type" value="SWORD"/>
                <set name="weight" value="1600"/>
        </weapon>
        <weapon id="2" name="Long Sword">
                <set name="crystal_type" value="NONE"/>
                <set name="icon" value="icon.weapon_long_sword_i00"/>
                <set name="price" value="105000"/>
                <set name="rnd_dam" value="10"/>
                <set name="soulshots" value="2"/>
                <set name="spiritshots" value="2"/>
                <set name="type" value="SWORD"/>
                <set name="weight" value="1560"/>
        </weapon>
作者: xczxczxcz    时间: 2022-5-21 07:12

可以,再复杂些也可以,
作者: sodawater    时间: 2022-5-21 12:04

回复 2# xczxczxcz


    怎么写的呢,求教
作者: hfxiang    时间: 2022-7-22 16:20

# 可用第3方工具awk解决问题:http://bcn.bathome.net/s/tool/index.html?key=gawk
# 以下代码保存为ANSI编码格式test.awk
# 执行:gawk -f .\test.awk A.txt B.xml
#
{
        if ((FNR == 1) && (NR != 1)) {
                Flies_No++
                FS = "="
                OFS = "="
                $0 = $0
        }
        if (Flies_No == 0) {
        Name_ID["\""$1"\" name"] = $2
        next
        }
        if ($0~/weapon id/) {
                $3="\"" Name_ID[$2] "\""">"
                $1 = $1
        }
        print
}
作者: hfxiang    时间: 2022-7-27 11:00

不用第3方工具的方法
以下代码以ANSi编码保存为test.bat,执行test.bat A.txt B.xml即可

@echo off
Setlocal EnableDelayedExpansion
for /f "delims==" %%a in ('set Name_ID[ 2^>nul') do set "%%a="
for /f "usebackq tokens=1*"  %%a in ("%~1") do set "Name_ID["%%a" name]="%%b">"
for /f "usebackq tokens=1-2* delims=="  %%a in ("%~2") do (
        set "Out_Srt=%%a"
        echo;"!Out_Srt!"|find.exe /i "<weapon id">Nul && (
                set "Out_Srt=!Out_Srt!=%%b=!Name_ID[%%b]!"
        )||(
                if %%b. NEQ . set "Out_Srt=!Out_Srt!=%%b"
                if %%c. NEQ . set "Out_Srt=!Out_Srt!=%%c"
        )
        echo;!Out_Srt!
)
endlocal




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2