从模板 xml 和 csv 值表生成 xml 文件

问题描述 投票:0回答:1

我有设备的模板 .xml 文件,其中包含 modbus 地址的占位符。我需要根据 .csv 列表再创建 50 个。 第一步,我创建了包含新设备名称的模板副本:

@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR /F "tokens=* delims=" %%x in (VRF_ListNames.csv) DO (
    copy VRF_equipment_template.xml ".\tmp\%%x.xml"
)
endlocal

第二步是使用值加载 .csv 并替换所有 .xml 文件中的占位符。

加载 csv 的代码

$adresses = import-csv .\VRF_Adress.csv

更换代码:

    gci -r -include ".\tmp\*.xml" |
 foreach-object { $a = $_.fullname; ( get-content $a ) |
 foreach-object { $_ -replace 'XXNAMEXX', $CSVNAME `
                       -replace 'XXADR1XX', $CSVADR1 `
                       -replace 'XXADR2XX', $CSVADR2 `
                       -replace 'XXADR3XX', $CSVADR3 `
                       -replace 'XXADR4XX', $CSVADR4 `
                       -replace 'XXADR5XX', $CSVADR5 `
                       -replace 'XXADR6XX', $CSVADR6 `
                       -replace 'XXADR7XX', $CSVADR7 `
                       -replace 'XXADR8XX', $CSVADR8 `
                       -replace 'XXADR9XX', $CSVADR9 }  | 
set-content $a }

我需要循环遍历所有文件,找到与 csv 第一列中的文件名匹配的设备名称,然后写入同一行中的所有 $CSVADR 值。任何人都可以请建议如何做。谢谢你

xml powershell templates replace
1个回答
0
投票

我找到了解决办法。问题是,我没有指定分隔符,并且 csv 未正确处理:

$devices = import-csv .\VRF_Adress.csv -delimiter ";"
$devices | ForEach-Object {
    $row = $_
(get-content ".\tmp\$($row.GROUP).xml" ) -replace 'XXNAMEXX', $($row.GROUP) `
                           -replace 'XXADR1XX', $($row.CSVADR1) `
                           -replace 'XXADR2XX', $($row.CSVADR2) `
                           -replace 'XXADR3XX', $($row.CSVADR3) `
                           -replace 'XXADR4XX', $($row.CSVADR4) `
                           -replace 'XXADR5XX', $($row.CSVADR5) `
                           -replace 'XXADR6XX', $($row.CSVADR6) `
                           -replace 'XXADR7XX', $($row.CSVADR7) `
                           -replace 'XXADR8XX', $($row.CSVADR8) `
                           -replace 'XXADR9XX', $($row.CSVADR9)  | 
    set-content ".\tmp\$($row.GROUP).xml"
}
© www.soinside.com 2019 - 2024. All rights reserved.