【问题标题】:get-content -multiple Replacements获取内容-多个替换
【发布时间】:2013-02-24 02:43:14
【问题描述】:

起初:对不起我的英语不好。

问题:

  1. 我有一个 .csv 文件,其中包含 30 个用户的名称、电子邮件地址等
  2. 我有一个 hmtl(或 rtf 或 txt),其中包含名称 (NameOfUser) 和电子邮件地址 (EmailUser) 的占位符(文档中的某个位置,有时是多个)。
  3. 我想读取每个用户名/电子邮件的 csv 文件,我想: a) 将 Word NameOfUser 替换为 csv 文件的 $User.Username 条目 b) 将 Word EmailUser 替换为 csv 文件的 $User.Email 条目 c) 将包含新内容的新文件写入 \UNC\Username\New-html-file.htm

我的问题: 如果我只更改一件事,名称或电子邮件地址,则输出有效。 如果我将第二个 -replace 放入 foreach-object 部分,则输出会导致错误。 我必须更改 5 个不同的条目,并希望我可以在一个获取内容中修复它 | .....一步。

脚本的一部分:

$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 条目)次 :(

提前致谢 丹尼尔

【问题讨论】:

  • @C.B. 的回答似乎是正确的。您的问题来自-replace 不会在$_ 中替换,而是返回一个带有修改的新字符串。这就是您的脚本每行多次写入输出的原因。每个 -replace 返回一个新字符串,然后将其发送到set-content

标签: regex powershell


【解决方案1】:

试试

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

【讨论】:

  • 您的答案是第一位的。谢谢,那行得通。感谢大家在论坛中的出色工作!
【解决方案2】:

未经测试,但我认为这应该可行,并且避免在磁盘驱动器中出现一些咀嚼:

$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
  }

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多