Get-Content和File Path的输出

时间:2017-07-05 18:46:47

标签: powershell

我在一个文件夹中有一组.txt个文件。例如:

1.txt
2.txt
3.txt

这些包含文件名后面的日期。例如,1.txt可能包含:

06/11/2017 randomdocument.txt
06/12/2017 otherdocument.txt
07/11/2017 yadocument.txt
01/02/2017 randomdocument.txt

我想:

  • 获取与特定日期正则表达式匹配的行
  • 将该行及其所在文件的路径写入新文档。

我的代码完成了第一部分。我已尝试过各种迭代,第二部分没有雪茄。任何帮助将不胜感激。

代码

Set-Location c:\users\john.smith\desktop\FORREPORT
$files = Get-ChildItem -recurse
$SearchPattern = "0[5,6]{1}/[0-9]\w{1,2}/2017"

Foreach ($file in $files) {
  $line = Get-ChildItem -recurse | Get-Content | Select-String $SearchPattern
  $d = $line | Select-Object file.FullName 
  $d | Add-Content -path c:\users\john.smith\desktop\ohsnap.txt

}

期望输出:

 06/12/2017 randomdocument.txt in c:\users\john.smith\desktop\FORREPORT\1.txt

1 个答案:

答案 0 :(得分:0)

对代码进行最少的更改:

Set-Location c:\users\john.smith\desktop\FORREPORT

$files = Get-ChildItem -recurse
$SearchPattern = "0[5,6]{1}/[0-9]\w{1,2}/2017"

Foreach ($file in $files) {
  $lines =  Get-Content $file | Select-String $SearchPattern
  if($lines){
      foreach($line in $lines){
        "$line`t$($file.FullName)" | Add-Content -path c:\users\john.smith\desktop\ohsnap.txt
      }
  }
}

这将在新文档的新行上打印每一行。如果您想在一行中找到所有匹配的行,请删除foreach

Set-Location c:\users\john.smith\desktop\FORREPORT

$files = Get-ChildItem -recurse
$SearchPattern = "0[5,6]{1}/[0-9]\w{1,2}/2017"

Foreach ($file in $files) {
  $lines =  Get-Content $file | Select-String $SearchPattern
  if($lines){
        "$lines`t$($file.FullName)" | Add-Content -path c:\users\john.smith\desktop\ohsnap.txt
  }
}

如果还要检查是否确实找到了匹配的行,那么只有$file.Fullname的{​​{1}}输出为$lines为空。

PS您的问题和代码是我能想到使用this quote的最佳示例。听从了! ;-p