下面的批处理脚本读取xml文件并提取所需的标记/值并将它们保存在输出文件中但问题是,所有必需的标记值在A列中一个接一个地保存。我希望每个标记值都存储起来在每个标记标题下面。非常感谢任何帮助。
xml输入文件内容:
<RIMP>
<HSI>
<SN>Pro Gen8</SN>
<SP>Podt1</SP>
<UUID>ILD9V</UUID>
<VIRTUAL>
<PN>Inte 4</PN>
<VID>
<BSN></BSN>
<TYPE>Admin</TYPE>
</VID>
</VIRTUAL>
<PRODUCTID> 9A </PRODUCTID>
<NICS>
<NIC>
<PORT>1</PORT>
<MACADDR></MACADDR>
</NIC>
</RIMP>
代码:
set inFile="C:\output\input.xml"
set outFile="C:\output.csv"
set req_tags=SN UUID PN TYPE
for %%a in (%inFile%) do (
for %%c in (%req_tags%) do (
set "found="
set search_tag=%%c
for /f "tokens=2 delims=>< " %%b in ( ' type "%%a" ^|findstr /i !search_tag! ' ) do set found=%%b
if defined found >> "%outFile%" echo !found!
)
)
当前输出为:(在文本编辑器中打开文件后)
SPN,UUID,PN,TYPE
Pro Gen8
ILD9V
Inte 4
Admin
但我试图输出为:
SN,UUID,PN,TYPE
Pro Gen8,ILD9V,Inte 4,Admin
使用DavidPostill代码后,我现在得到预期的输出:
SN,UUID,PN,TYPE
Pro Gen8,ILD9V,Inte 4,Admin
如何在csv文件中添加服务器ip / info作为第一列(服务器信息来自serverlist文件)
Server,SN,UUID,PN,TYPE
11.12.13.14,Pro Gen8,ILD9V,Inte 4,Admin
David的代码可以解决这个问题,任何人都需要有关csv格式输出的答案然后我建议请看下面David的回复。
答案 0 :(得分:1)
假设您确实想要CSV文件作为输出,请使用以下批处理文件。
<强> TEST.CMD 强>:
@echo off
setlocal enabledelayedexpansion
set inFile="C:\output\input.xml"
set outFile="C:\output.csv"
set req_tags=SN UUID PN TYPE
set outLine=
echo SN,UUID,PN,TYPE > %outFile%
for %%a in (%inFile%) do (
for %%c in (%req_tags%) do (
set search_tag=%%c
for /f "tokens=2 delims=>< " %%b in ('type "%%a" ^|findstr /i !search_tag!' ) do (
if [%%b] NEQ [] (
rem we don't want to match /BSN
if [%%b] NEQ [/BSN] (
set outline=!outline!%%b,
)
)
)
)
)
rem output the values
rem remove trailing ,
set outline=%outline:~0,-1%
echo %outline%>>"%outFile%"
endlocal
<强>用法:强>
F:\test>test
F:\test>type C:\output.csv
SN,UUID,PN,TYPE
Pro Gen8,ILD9V,Inte 4,Admin
F:\test>