我是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!
)
我不确定直接重命名将如何工作。也许您应该首先重命名具有不同扩展名的文件,以避免冲突。