下面的代码获取serverFile文件中列出的每个服务器的xml数据输出,并以csv格式获取所需的标记值作为输出,并将所需的标记名称作为标题。 我试图达到以下要求,使代码更通用/输出格式可读,即
一个。使ipaddress参数化,可以在wget行中使用server_variable,反过来可以为serverFile中存在的所有服务器运行
.\bin\wget64.exe -OC:\output.xml http://11.12.13.15/xmldata?get=AllRecord
在上面的代码行中,我正在考虑将ipaddress参数设置为读取服务器信息,并将其保存在变量即服务器中,因此,在上面的IP地址行中我们可以使用%server%这样的东西:< / p>
。\ bin \ wget64.exe -OC:\ output.xml http://%server%/xmldata?get=AllRecord
湾第二点是,在当前结果csv文件中,以csv格式获取所有必需的标签/值但不知何故想要包含IP地址以及头名称作为SERVER,我被建议再使用一个for循环而我确实尝试但是没有& #39;在SERVER标题名称
下获取serverFile的内容代码:
@Echo Off
setlocal enabledelayedexpansion
set serverFile="C:\serverlist.txt"
set inFile="C:\output.xml"
set outFile="C:\output.csv"
if exist %outFile% del %outFile%
rem set the header line
set req_tags=SN,UUID,PN,TYPE
set outLine=
echo SN,UUID,PN,TYPE > %outFile%
for /f "tokens=*" %%f in (%serverFile%) do (
set serverIP=%%f
echo --------- !serverIP! ------------------
rem pause
.\bin\wget64.exe -OC:\output.xml http://11.12.13.15/xmldata?get=AllRecord
rem .\bin\wget64.exe -OC:\output.xml http://!serverIP!/xmldata?get=AllRecord
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
output.csv内容:
SERVER,SN,UUID,PN,TYPE
Pro Gen8,Pro Gen8,ILD9V,IDC21E,Inte 4,Admin
在上面的输出中,在SERVER标题下,应该获取服务器IP地址,但是当前正在获取serverFile的完整路径而不是它的内容。
然后在UUID标题下,xml文件在不同父标题下有2个UUID标记,因此,在输出文件中,我们将两个UUID放在彼此旁边,这反过来又移动下一个标题的输出,即PN,TYPE错误分配。不确定我们是否可以在某个子函数中使用reg_tag和parent标签(查找)作为参数,因此函数只能获得一个结果。
答案 0 :(得分:0)
您使用delayed expansion不一致:
ECHO is off.
来自echo %ip% >> %outFile%
:
echo !ip! >> %outFile%
*,=
来自call :outputlinetocsv "%hLine%"
:
call :outputlinetocsv "!hLine!"
for %%a in (%req_tags%) do (
for %%a in (!req_tags!) do (
for %%a in (%req_tags%) do (
,但在{/ 1}}循环中定义set "req_tags=SP PN TYPE"
,之前