使用批处理脚本在输出csv文件中获取服务器详细信息

时间:2016-08-02 13:49:42

标签: batch-file

下面的代码获取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标签(查找)作为参数,因此函数只能获得一个结果。

1 个答案:

答案 0 :(得分:0)

您使用delayed expansion不一致:

  1. ECHO is off.来自echo %ip% >> %outFile%
    • 应为echo !ip! >> %outFile%
  2. 所有*,=来自call :outputlinetocsv "%hLine%"
    • 应为call :outputlinetocsv "!hLine!"
  3. 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" 之前