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

[文本处理] 请教根据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>

不用第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

TOP

# 可用第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
}

TOP

回复 2# xczxczxcz


    怎么写的呢,求教

TOP

可以,再复杂些也可以,
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

返回列表