Powershell 在输出中包含文件名

Powershell 在输出中包含文件名,powershell,powershell-4.0,Powershell,Powershell 4.0,我想从文件夹中的文件中获取内容(忽略标题行,因为某些文件可能只包含标题)。但是在输出中,我想包括从中读取行的文件名。到目前为止,我有以下几点: Get ChildItem | Get Content | Where{$|-notlike“HEADER_LINE_TEXT”}Out File-FilePath output_TEXT.txt 我曾尝试在Where块中创建一个变量,$filename=$\u.BaseName,并在输出中使用它,但没有成功 编辑: 我的结论如下: Get ChildI

我想从文件夹中的文件中获取内容(忽略标题行,因为某些文件可能只包含标题)。但是在输出中,我想包括从中读取行的文件名。到目前为止,我有以下几点:

Get ChildItem | Get Content | Where{$|-notlike“HEADER_LINE_TEXT”}Out File-FilePath output_TEXT.txt

我曾尝试在Where块中创建一个变量,
$filename=$\u.BaseName
,并在输出中使用它,但没有成功

编辑:

我的结论如下:

Get ChildItem-Path
其中对象{$\.FullName-类似于“*records.txt”;$fname=$\.FullName;}
获取内容|
选择对象{($fname+“|”+$uu.Trim())}
其中{$\-notlike“*标题\行\文本*”}
格式表-HideTableHeaders|
输出文件-文件路径输出\u text.txt


这看起来很长,而且可能会变得更短更清晰。有人能帮我清理一下吗?我会发布解决方案,或者投票选择一个更干净的解决方案,如果有人发布的话。谢谢。

这看起来像是一种情况,在这种情况下,不使用一行代码就可以提高可读性,而只需额外占用一点内存

$InputFolder = "C:\example"
$OutputFile = "C:\example\output_text.txt"
$Files = Get-ChildItem $InputFolder | Where-Object { $_.FullName -like "*records.txt"}
Foreach ($File in $Files) {
    $FilteredContent = Get-Content $File.FullName | Where-Object {$_ -notlike "*HEADER_LINE_TEXT*"}
    $Output = $FilteredContent | Foreach-Object { "$($File.FullName)|$($_.Trim())" }
    $Output | Out-File $OutputFile -Append
}
如果为了简洁起见要使用单线样式,可以通过使用参数的位置和别名来缩短长度

以下是一些其他变化:

  • 第一个
    where
    块中不需要第二个分号
  • 我认为您的变量不起作用,因为您错过了
    $\ucode>和
    全名
    之间的时间段
  • 不需要
    格式表
    ,因为您已经有了要输出的字符串
  • 您可以通过将第二个
    移动到前面的
    位置来进行一些优化,这样您就不会
    trim()
    对要筛选的行进行筛选
  • 看起来您想使用
    foreach
    而不是
    select
  • 删除了字符串连接的
    +
    运算符,而不是使用
    $()
    在括号内求值

谢谢,本。我并不是真的想把它作为一条线。您在第一段代码中提出的解决方案对我很有效。两种方法都有效,并且都有优点/缺点。但我同意第一种方法是我将使用的方法,因为只要合理,我会优先考虑可读性和易于修改。很高兴它成功了:)
gci . | 
    ? { $_.FullName -like "*records.txt"; $fname=$_.FullName } | 
    % { gc $_.FullName } | 
    ? { $_ -notlike "*HEADER_LINE_TEXT*" } | 
    % { "$fname|$($_.Trim())" } | 
    Out-File output_text.txt