ソースファイルを読み込んで特定の文字を新しいものに置き換える既存のスクリプトがあります。だからかなりハードにコード化されています。Powershell - 置換操作の参照としてCSVを使用する
(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
}
は、ソースファイル内のフィールド2とフィールド1の交換が、それはちょうど私のコード
$_ -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
で終わることを期待されたが入れているので、代わりの私は、私はと思われます正しくエスケープしないでください。
あなたが言いました「苦情」をそのままご記入ください。また、[mcve]を提供してください。上のスニペットの変数の多くは表示されません( '$ CSV'、' $ path'など)。 – gravity
オリジナルの編集では、あなたが見る出力を与える 'ForEach'ループの中にスクリプトブロックがネストされています。 'Foreach-Object {{$ _ -replace '$ field1'、 '$ field2'}}'となります。それはあなたの問題の原因で私の推測です - それはちょうどセットコンテンツでファイルにscriptblockを書いていた。これであなたの編集で間違いを修正しました。私はあなたのコードがこれ以上同じ問題を起こさないだろうと思っています...? – TessellatingHeckler