在Powershell中添加内容

时间:2013-06-10 15:45:26

标签: powershell

我需要搜索多个文件,在特定行下面,我需要在每个相应的文件中插入先前引用的行。到目前为止,我无法让我的脚本工作。 这就是我到目前为止所做的:

$TextLocation = "M:\test"
$files = get-childitem -filter *.gto -path $TextLocation

Foreach ($file in $files) {
  $pagetitle = "DS_PGSEQ-DC:"
  $a = Get-Content $file.FullName | Select-String "AssignedToUserID-TZ"
  $b = Get-Content $file.FullName | Select-String "EFormID-TZ"
  Foreach ($line in $file)
  {
    if([String]$line -eq "DS_PGSEQ-DC:0001")
    {
    }
    elseif([String]$line -eq $pagetitle) 
    {
      Add-Content $file.FullName ($a -and $b)
    }
  }
}

2 个答案:

答案 0 :(得分:0)

将文本插入文本文件有两种常用方法:

  1. 逐行处理输入文件,将输出写入临时文件,然后将输入文件替换为临时文件。

    for ($file in $files) {
      $filename = $file.FullName
      Get-Content $filename | % {
        if ( $_ -match 'seach pattern' ) {
          $_
          "new line"
        }
      } | Out-File $tempfile
      MoveItem $tempfile $filename -Force
    }
    
  2. 读取文件的全部内容,使用正则表达式替换插入文本,然后将修改后的内容写回文件。

    for ($file in $files) {
      $text = [System.IO.File]::ReadAllText($file.FullName)
      $text -replace '.*search pattern.*', "`$0`nnew line" |
        Out-File $file.FullName
    }
    

答案 1 :(得分:0)

$TextLocation = "M:\test"
$Outputlocation = "M:\test\output"
$files = get-childitem -filter *.gto -path $TextLocation

Foreach ($file in $files) {
  $pattern = "\d\d\d[2-9]"
  $found=$false
  $contains=$false

  $lines = Get-Content($file.FullName) |
    Foreach-object { 
      if ($_ -match "AssignedToUserID-TZ") {
        $a = $_
      }

      if ($_ -match "EFormID-TZ") {
        $b = $_ 
      }        

      if ($_ -match "DS_PGSEQ-DC:$pattern") {
        if($found -eq $false) {
          $found=$true
        }
      } else {
        $found=$false
      }

      if ($found -eq $true) {
        $contains=$true

        #Add Lines after the selected pattern
        $_
        $a
        $b
      }

      if ($found -ne $true) {
        $_
      }

    } | Set-Content($Outputlocation + "\" + $file.Name)
}