Powershell 获取内容度量对象命令:将其他行添加到实际行数

Powershell 获取内容度量对象命令:将其他行添加到实际行数,powershell,csv,Powershell,Csv,这是我第一次在这里发帖——如果我没有遵循一定的发帖礼仪,我会提前道歉。我是powershell的新手,但我希望有人能帮我想办法。 我使用下面的powershell脚本告诉我CSV文件中的总行数减去标题。这将生成一个文本文件 $x = (Get-Content -Path "C:\mysql\out_data\18*.csv" | Measure-Object -Line).Lines $logfile = "C:\temp\MyLog.txt" $file

这是我第一次在这里发帖——如果我没有遵循一定的发帖礼仪,我会提前道歉。我是powershell的新手,但我希望有人能帮我想办法。 我使用下面的powershell脚本告诉我CSV文件中的总行数减去标题。这将生成一个文本文件

$x = (Get-Content -Path "C:\mysql\out_data\18*.csv" | Measure-Object -Line).Lines
$logfile = "C:\temp\MyLog.txt"
$files = get-childitem "C:\mysql\out_data\18*.csv"
foreach($file in $files)
 {
  $x--
  "File: $($file.name) Count: $x" | out-file $logfile -Append
 }
我这样做是为了10个单独的文件。但只有一个文件在实际计数的基础上又增加了807行。例如,对于上面的代码,文件中的实际行数(减去标题)是25083。但我上面的脚本生成25890作为计数。我曾尝试对同一类型的文件(相同的数据,不同的日期)进行不同的迭代,但它一直在向行数添加807

即使只运行
(获取内容路径“C:\mysql\out\u data\18*.csv”| Measure Object-Line)。行
,我仍然在powershell窗口中看到错误的记录计数


我怀疑csv文件本身可能有问题?我得出这个结论是因为10个文件中有9个生成了正确的行数。感谢您提前抽出时间。

要测量csv中的项目,您应该使用
导入csv
,而不是
获取内容
。这样,您就不必担心标题或空行

(Import-Csv -Path $csvfile | Measure-Object).Count

这个csv文件肯定有问题。另外,请注意,如果csv的单元格中包含换行符,则会混淆获取内容,因此也请尝试导入csv

我从这个开始

$PathToQuestionableFile = "c:\somefile.csv"
$TestContents = Get-Content -Path $PathToQuestionableFile
Write-Host "`n-------`nUsing Get-Content:"
$TestContents.count
$TestContents[0..10]
$TestCsv = Import-CSV -Path $PathToQuestionableFile
Write-Host "`n-------`nUsing Import-CSV:"
$TestCsv.count
$TestCsv[0..10] | Format-Table
这将让您看到Get Content在拉什么,以便缩小问题的范围

如果它在文件本身中,并且使用
Import CSV
无法修复它,我会尝试使用它来检查编码和行尾

  • 是一个下拉菜单,与其他csv文件进行比较
  • 可以通过(视图>显示符号>显示所有字符)查看。它们应该在整个文件中保持一致,并且应该是其中之一
    • CR
      (通常是来自mac的)
    • LF
      (通常来自*nix或互联网)
    • CRLF
      (通常是来自windows的)

它还可以正确处理跨多行的行(双引号字段中的换行符)。这非常好!我将Get内容替换为Import Csv,并且能够获得正确的行数。它甚至帮助我消除了减量x$-,这真是太棒了。非常感谢!令人惊叹的!请考虑将其作为未来访问者的答案,谢谢您关于打开No.PodPAD++的CSV的信息。LF是某些记录中的罪魁祸首,因为有一列有“注释”,这导致它在某些瞬间强制换行。非常感谢您的反馈,非常有帮助!