【问题标题】:Read CSV file in PowerShell [duplicate]在 PowerShell 中读取 CSV 文件 [重复]
【发布时间】:2017-08-25 08:41:31
【问题描述】:

我正在尝试使用 PowerShell 读取 .csv 文件。

我使用的文件看起来像这样:

Application;Email
ApplicationName 1;random@address.com
ApplicationName 2;another@email.com

我在网上搜索了一些使用 PowerShell 读取 .csv 文件的方法,我发现这个看起来非常简单明了:

$csvfile = Import-CSV -Path "$ScriptDir\SpecificApp.csv"
Foreach ($el in $csvfile) {
    Write-Host $el.Email
}

问题是它不显示任何内容,当我尝试用Write-Host $el 更改Write-Host $el.Email 行时,我得到了这个:

@{Application;Email=ApplicationName 1;random@address.com} @{Application;Email=ApplicationName 2;another@email.com}

我知道我可以使用一些 .split() 检索数据,但我想了解我如何才能正常获取这些数据

【问题讨论】:

  • 能否请您发布实际文件内容(至少几行没有敏感数据)而不是 Excel(?)屏幕截图?
  • 刚刚添加到截图下方

标签: powershell csv


【解决方案1】:

发生这种情况,因为您使用分号 ; 作为字段分隔符。默认情况下,Import-CSV 需要逗号 ,。因此只有一列名为Application;Email,而不是两列ApplicationEmail

$csvfile

Application;Email
-----------------
ApplicationName 1;random@address.com
ApplicationName 2;another@email.com

您甚至可以使用双引号引用意外的列名(因为冒号是语句分隔符):

$csvfile | % {$_."Application;Email"}
ApplicationName 1;random@address.com
ApplicationName 2;another@email.com

要获得预期的结果,请像这样使用-Delimeter 参数,

$csvfile = Import-CSV -Path C:\temp\ps.csv -Delimiter ";"
$csvfile

Application       Email
-----------       -----
ApplicationName 1 random@address.com
ApplicationName 2 another@email.com

【讨论】:

  • 非常感谢您的回答,这解决了我的问题!
猜你喜欢
  • 2022-01-05
  • 2013-04-06
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2017-05-01
  • 2013-04-03
  • 2021-07-28
  • 2013-01-21
相关资源
最近更新 更多