get-content -multiple替换

时间:2013-03-08 14:14:00

标签: regex powershell

起初:对不起我的Bad Englisch。

问题:

  1. 我有一个包含名称,电子邮件地址等30位用户的.csv文件
  2. 我有一个hmtl(或rtf或txt),其中包含名称占位符(NameOfUser)和电子邮件地址(EmailUser)(文档中某处,有时多处)。
  3. 我想阅读我想要的每个用户名/电子邮件的csv文件: a)用csv文件的$ User.Username条目替换Word NameOfUser b)将单词EmailUser替换为csv文件的$ User.Email条目 c)使用新内容将新文件写入\ UNC \ Username \ New-html-file.htm
  4. 我的问题: 如果我只更改一件事,名称或电子邮件地址,输出工作。 如果我将第二个替换放入foreach-object部分,则输出会导致错误。 我必须更改5个不同的Entrys,并希望我可以在一个get-content中修复它.....步骤。

    脚本的一部分:

    $userfile = import-csv \\the-fileserver\User.csv
    foreach ($User in $Userfile) {
    
       Get-Content \\the-fileserver\File.htm | foreach-object { 
                $_ -replace 'Username', $User.Name 
                $_ -replace 'email-adresse', $User.Email
    
                 } | set-content -path $NewHTMFile
    

    问题: 每行在$ NewHTMFile中显示2(或更多等于-replace entries)Times :(

    先谢谢 丹尼尔

2 个答案:

答案 0 :(得分:1)

...
Get-Content \\the-fileserver\File.htm | foreach-object { 
            $_ -replace 'Username', $User.Name -replace 'email-adresse', $User.Email }
...

答案 1 :(得分:1)

未经过测试,但我认为这样可以解决问题,并避免在磁盘驱动器中咀嚼:

$userfile = import-csv \\the-fileserver\User.csv
$HTML = Get-Content '\\the-fileserver\File.htm'

foreach ($User in $Userfile)
  {
    $HTML -replace 'Username', $User.Name -replace 'email-adresse', $User.Email |
     set-content -path $NewHTMFile
  }