解析文件夹中的XML文件,并使用三个节点的值重命名它们

时间:2017-03-30 15:49:09

标签: xml windows batch-file

我是winbatch脚本的新手。我想在文件夹中删除XML文件,并使用三个节点的值重命名它们。     例如:在C盘中我有三个文件:

1.xml
2.xml
3.xml

批处理脚本应按如下方式重命名文件:

1.xml = AB_D_HR.xml
2.xml = ZZ_PK_IT.xml
3.xml = TS_MR_IT.xml

我达到了可以获得两个节点的值的点,但不确定进一步的步骤。请建议:

XML1:
<company name="AAA">
    <department>
        <depname>HR</depname>
    </department>
    <Employee>      
        <lastname>D</lastname>
        <firstname>AB</firstname>
    </Employee>
</company>

XML2:
<company name="AAA">
    <department>
        <depname>IT</depname>
    </department>
    <Employee>      
        <lastname>PK</lastname>
        <firstname>ZZ</firstname>
    </Employee>
</company>

XML3:
<company name="AAA">
    <department>
        <depname>IT</depname>
    </department>
    <Employee>      
        <lastname>MR</lastname>
        <firstname>TS</firstname>
    </Employee>
</company>
@echo off

for /f "delims=" %%T in ('dir /b *.xml') do (
   for /f "tokens=3 delims=<>" %%A in (
     'find /i "<lastname>" ^< "%%T"'
    )do set K=%%A 


for /f "tokens=3 delims=<>" %%B in (
     'find /i "<firstname>" ^< "%%T"'
    )do set L=%%B

)

echo %K%_%L%


pause

2 个答案:

答案 0 :(得分:0)

检查xpath.bat

@echo off

setlocal enableDelayedExpansion
for  %%T in (*.xml) do (
   for /f "tokens=* delims=" %%A in (
     'xpath.bat "%%T" "//lastname"'
    ) do set "K=%%A" 


   for /f "tokens=* delims=" %%A in (
     'xpath.bat "%%T" "//firstname"'
    ) do set "L=%%B"

Echo !L! !K!

)

我不确定直接重命名是如何工作的。也许你应该首先重命名具有不同扩展名的文件以避免冲突。

答案 1 :(得分:0)

根据您的文件名,以及可能的内容,可能会出现以下情况。

@Echo Off
SetLocal EnableDelayedExpansion
Set "i=0"
For /F "Tokens=1,4 Delims=:<>" %%A In (
    'Findstr/IC:"<depname>" /C:"<lastname>" /C:"<firstname>" "*.xml"') Do (
    Set/A "i+=1"
    If !i! Equ 1 (Set "_=%%B%%~xA") Else (If !i!==2 (Set "_=%%B_!_!"
        ) Else (Ren "%%A" "%%B_!_!"
            Set "i=0")))
Timeout -1
GoTo :EOF