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