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



我是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

根据您的文件名及其可能的内容,可能会执行以下操作。

@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

检查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!
)

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

最新更新