【发布时间】:2016-07-20 18:53:42
【问题描述】:
我有一个现有的脚本,它读取源文件并用新字符替换某些字符。所以它几乎是硬编码的。
(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,但尝试使用 ForEach 循环,其中包含 Get-Content。
$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
}
因此,与其在源文件中将 field1 替换为 field2,不如将我的代码放入其中
$_ -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
我怀疑我没有正确地转义它。
【问题讨论】:
-
请逐字向我们提供您提到的“投诉”。另外,请提供minimal reproducible example,因为上面的 sn-p 中的许多变量是不可见的(
$CSV、$path等)。 -
我注意到在您的原始编辑中,您在
ForEach循环中嵌套了一个脚本块,这将提供您看到的输出。Foreach-Object { {$_ -replace '$field1','$field2'} }。这是我对您的问题原因的猜测 - 它只是将脚本块写入带有 Set-Content 的文件。现在您已经纠正了编辑中的错误,我敢打赌您的代码不会再出现同样的问题...?。
标签: csv powershell lookup