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