以下のコードは、serverFileファイルにリストされている各サーバのxmlデータ出力を取得し、必要なタグ名をヘッダとして必須のタグ値をcsv形式で出力します。 コードをより一般的なものにするために以下の要件を達成しようとしています/出力形式は、つまりバッチスクリプトを使用して出力csvファイルのサーバ詳細を取得
aです。そのパラメータ化IPアドレスを作り、これは上記のコード行にserverFile
.\bin\wget64.exe -OC:\output.xml http://11.12.13.15/xmldata?get=AllRecord
に存在するすべてのサーバに対して実行することができ、私はIPアドレスのようなものをパラメータ化することを考えていたのwgetラインにし、順番にserver_variableを使用することができますサーバ情報を読み込んで変数に保存します。つまり、サーバ上の上記の行のIPアドレスの場所に%server%を使用します。
。\ bin \ wget64.exe -OC:\ output.xml http://%server%/xmldata?get=AllRecord
b。 2番目のポイントは、現在の結果のcsvファイルで、csv形式で必要なすべてのタグ/値を取得していますが、何とかIPアドレスとSERVERというヘッダ名を追加したかったので、もう1つループを使用するように提案されました。
@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内容::「Tは、コード
SERVERヘッダ名の下
をserverFileのコンテンツを取得する上記の出力でSERVER,SN,UUID,PN,TYPE
Pro Gen8,Pro Gen8,ILD9V,IDC21E,Inte 4,Admin
、SERVERヘッダの下で、サーバーのIPアドレスを取得する必要があります現在はserverFileのフルパスを取得しています。そうではありません。
UUIDヘッダーの下では、xmlファイルには異なる親の下に2つのUUIDタグがあります。そのため、出力ファイルでは両方のUUIDを隣り合わせに取得しています。私たちがreg_tagと親タグ(探しているもの)を引数として与えることができる部分関数を持つことができるかどうかわからないので、関数はただ1つの結果しか得ません。あなたは一貫性delayed expansionを使用している
ご提案をお寄せいただきありがとうございますが、私はinitally間違ったコードを使用していました。正しいコードと要約で元の投稿を更新しました。再度、感謝します。 – HULK