【问题标题】:Get results of For-Each arrays and display in a table with column headers one line per results获取 For-Each 数组的结果并显示在一个表格中,每个结果的列标题为一行
【发布时间】:2019-12-17 22:49:18
【问题描述】:

我正在尝试获取文件列表和每个文件中显示的行数,该表显示在由两列名称和行组成的表中。

我尝试过使用格式表,但我认为问题不在于表格的格式,而更多地与我的结果是单独的结果有关。见下文

#Get a list of files in the filepath location
$files = Get-ChildItem $filepath 

$files | ForEach-Object { $_ ; $_ | Get-Content | Measure-Object -Line}  | Format-Table Name,Lines

预期结果

名称行

文件 A 9

文件 B 89

实际结果

名称行

文件 A
9
档案B
89

【问题讨论】:

  • 你是对的 - 你正在输出两个项目。 [grin] 我会在您的 ForEach-Object 段中构建一个自定义对象并输出它。

标签: powershell foreach


【解决方案1】:

通常您会像这样制作自定义对象,而不是输出两种不同类型的对象。

$files | ForEach-Object { 
  $lines = $_ | Get-Content | Measure-Object -Line
  [pscustomobject]@{name = $_.name
                   lines = $lines.lines}
} 


name     lines
----     -----
rof.ps1     11
rof.ps1~     7
wai.ps1      2
wai.ps1~     1


【讨论】:

  • 感谢您的回答,这也有效!你能告诉我现在如何将结果格式化为你的结果吗?我的数字在我的文件名行上出现锯齿状。
  • 应该是一样的。也许你有一个错字。
  • 它对我有用。你在powershell 5中吗?并不是说代码不适用于子目录。
  • 是的,我在 5 岁,我是一个完整的初学者,所以这实际上是我的第一段代码,我应该在设置中做些什么吗?
【解决方案2】:

另一种制作这样的自定义对象的方法:Using PowerShell's Calculated Properties:

$files | Select-Object -Property @{ N = 'Name' ; E = { $_.Name} }, 
    @{ N = 'Lines'; E = { ($_ | Get-Content | Measure-Object -Line).Lines } }
Name                      Lines
----                      -----
dotNetEnumClass.ps1         232
DotNetVersions.ps1            9
dotNETversionTable.ps1       64

【讨论】:

  • 你如何让你的结果以对齐方式格式化,我的结果是锯齿状的,我希望它们看起来像一个表格,标题与结果对齐
  • 对不起,我不明白你的锯齿状格式问题。也许在 ISE 中:Tools => Options… 检查Font Family 并确保它是固定大小的字体。但是,如果您的文件名同时包含拉丁字符和双角字符(例如 CJK),那么我没有解决方案……
猜你喜欢
  • 2015-02-16
  • 1970-01-01
  • 2021-10-02
  • 2016-12-05
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
相关资源
最近更新 更多