计算 CSV 文件中的行数并将结果导出到 CSV
Count Rows in CSV files and export results to CSV
我正在尝试计算文件夹中一堆 CSV 中包含值的行数。我设法获得了计算它的代码,但我似乎找不到将结果导出到 CSV 的方法。我得到的只是一个空白的 CSV。
我在这里错过了什么?
$FOLDER_ROOT = "C:\Test19"
$OUTPUT_CSV = "C:\Test19\Count.csv"
Get-ChildItem $FOLDER_ROOT -re -in "*.csv" | ForEach-Object {
$filestats = Get-Content $_.Fullname | Measure-Object -Line
$linesInFile = $filestats.Lines - 1
Write-Host "$_,$linesInFile"
} | Export-Csv -Path $OUTPUT_CSV -NoType
Write-Host
只写入主机!您很可能在 PowerShell 控制台中看到了输出?
使用 Write-Output
,它可以通过管道传输到 Export-CSV。
您的代码存在几个问题:
使用 Get-ChildItem -Filter '*.csv'
而不是 Get-ChildItem -Include '*.csv'
。前者比后者快
Write-Host
很可能导致输出直接进入主机控制台。我被告知这在最近的版本中已更改(以便主机输出进入新的信息流),但对于至少在 v5 之前的版本它仍然是现实。
Export-Csv
需要 object 输入,因为它将 object 的属性输出为 CSV 的字段(从 属性 第一个名字 object)。向其输入字符串 ("$_,$linesInFile"
) 将生成仅包含一列 "Length" 的 CSV,因为那是字符串 object 中唯一的 属性。
使用 calculated property 创建包含输入文件的文件名和行数的 CSV:
Get-ChildItem $FOLDER_ROOT -Recurse -Filter '*.csv' |
Select-Object Name, @{n='LineCount';e={(Get-Content $_.Fullname | Measure-Object -Line).Lines - 1}} |
Export-Csv $OUTPUT_CSV -NoType
我正在尝试计算文件夹中一堆 CSV 中包含值的行数。我设法获得了计算它的代码,但我似乎找不到将结果导出到 CSV 的方法。我得到的只是一个空白的 CSV。
我在这里错过了什么?
$FOLDER_ROOT = "C:\Test19"
$OUTPUT_CSV = "C:\Test19\Count.csv"
Get-ChildItem $FOLDER_ROOT -re -in "*.csv" | ForEach-Object {
$filestats = Get-Content $_.Fullname | Measure-Object -Line
$linesInFile = $filestats.Lines - 1
Write-Host "$_,$linesInFile"
} | Export-Csv -Path $OUTPUT_CSV -NoType
Write-Host
只写入主机!您很可能在 PowerShell 控制台中看到了输出?
使用 Write-Output
,它可以通过管道传输到 Export-CSV。
您的代码存在几个问题:
使用
Get-ChildItem -Filter '*.csv'
而不是Get-ChildItem -Include '*.csv'
。前者比后者快Write-Host
很可能导致输出直接进入主机控制台。我被告知这在最近的版本中已更改(以便主机输出进入新的信息流),但对于至少在 v5 之前的版本它仍然是现实。Export-Csv
需要 object 输入,因为它将 object 的属性输出为 CSV 的字段(从 属性 第一个名字 object)。向其输入字符串 ("$_,$linesInFile"
) 将生成仅包含一列 "Length" 的 CSV,因为那是字符串 object 中唯一的 属性。
使用 calculated property 创建包含输入文件的文件名和行数的 CSV:
Get-ChildItem $FOLDER_ROOT -Recurse -Filter '*.csv' |
Select-Object Name, @{n='LineCount';e={(Get-Content $_.Fullname | Measure-Object -Line).Lines - 1}} |
Export-Csv $OUTPUT_CSV -NoType