Powershell - 使用CSV作为替换操作的查找

时间:2016-07-20 18:53:43

标签: csv powershell lookup

我有一个现有的脚本,它读入一个源文件并用新的字符替换某些字符。所以它几乎是硬编码的。

(Get-Content $path\$xml_out) | Foreach-Object {$_ -replace '<ContactCode>PROP</ContactCode>','<ContactCode>OFFICE</ContactCode>'}  | set-content $path\$xml_out

我想要做的是将旧值和新值存储在CSV文件中(只有2列),以便用户可以进行临时更改。所以我的CSV看起来像这样

ORGIGINAL_CODE,NEW_CODE
CAREHOME,OFFICE
PROP,EMERG
MAIN,OFFICE
DAY,OFFICE
TELE,TEL
BUSINESS,OFFICE

这是我正在替换的原始文件。

CAREHOME
PROP
MAIN
DAY
TELE
BUSINESS

我正在使用import-csv,但尝试在其中使用带有Get-Content的ForEach循环。

$testcsv = import-csv $path\mapping.csv
ForEach ($row in $testcsv)
{
    $field1 = $row.ORGIGINAL_CODE
    $field2 = $row.NEW_CODE
    Echo "$field1 maps to $field2"
    echo "$xml_out"
    (Get-Content $path\$xml_out) | Foreach-Object  {$_ -replace '$field1','$field2'}  | set-content $path\$xml_out
}

因此,不是在源文件中用field2替换field1,而是将代码放在

$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2
$_ -replace $field1,$field2

我希望最终得到

OFFICE
EMERG
OFFICE
OFFICE
TEL
OFFICE

我怀疑我没有正确地逃避它。

1 个答案:

答案 0 :(得分:0)

我可能更容易处理数组并在循环结束时输出。

$testcsv = Import-Csv $path\mapping.csv
$XmlIn = Get-Content  $path\Scripts\XML.txt
foreach ($row in $testcsv)
{
    $field1 = $row.ORGIGINAL_CODE
    $field2 = $row.NEW_CODE
    Write-Host "$field1 maps to $field2"
    $XmlIn = $XmlIn.Replace($field1,$field2)
}
$XmlIn | Out-File $path\XML.txt