【问题标题】:Powershell Import CSVPowershell 导入 CSV
【发布时间】:2020-12-10 03:18:18
【问题描述】:

我刚开始学习 PowerShell,但在尝试使用 gci 和 import-csv 时遇到了障碍。我的目标是在一个文件夹目录中运行一个脚本,该目录有许多子文件夹,这些子文件夹包含我要导入和合并数据的特定 csv 文件。这些子文件夹还有其他子文件夹,这些子文件夹具有其他文件类型,包括我没有任何用途的 csv。我对下面的具体路径感兴趣。 csv 文件有一个名为 location 的特定标头类型,我关心它并且必须解析成一个字符串。

Folder directory example

这是我目前的代码:

$files = gci .\ -Recurse
foreach($file in $files) {
    $foldername = $file.Name
    $csv = Import-Csv -Path ".\$foldername\$foldername.csv"
    foreach ($line in $csv) {
        $outputlines = $line.location -split '/'
        Export-csv -Path .\Test.csv -NoTypeInformation -Append
    }
}

这是我运行它时收到的消息: 命令管道位置 1 处的 cmdlet Export-Csv 为以下参数提供值: 输入对象:

有人可以指导我正确的方向吗?

【问题讨论】:

  • 你得到的错误是因为你没有告诉Export-Csv what 你想要它导出。您需要为其提供某种数据以输出到文件。在您的情况下,您可能希望通过管道将$line 导入Export-Csv。 InputObject 是 Export-Csv 的必需参数,可以通过管道或 -InputObject 参数提供

标签: powershell import-csv


【解决方案1】:

正如其他人所评论的那样,严格来说,Export-Csv 需要导出一些东西。然而,这不是唯一的问题。 Import-Csv 将根据 csv 文件中的数据返回对象。因此,-split 可能会提供奇怪的结果,因为它旨在针对字符串和/或字符串数​​组运行。

尽管-split 不太可能起作用,但您可以更简单地解决合并问题,只需将许多Import-Csv 命令的结果提供给单个Export-csv 命令:

$OutputCsv = 'c:\temp\Output.csv'
Get-ChildItem .\ -Directory |
ForEach-Object{
    $FolderName = $_.Name
    ".\$FolderName \$FolderName .csv"
} |
Import-Csv |
Export-Csv -Path $OutputCsv -NoTypeInformation -Append

循环将输出一系列通过管道传送到Import-Csv 的字符串。因此,所有文件都将被导入,生成的对象将流式传输到 Export-Csv,将所有内容合并到 $Outputcsv 中,即 c:\temp\Output.csv。

注意:-Directory 参数的使用。因为您只使用应该防止一些错误的文件夹名称,特别是对于可能不存在的文件名。

如果您想通过 CSV 内容示例和所需输出来澄清问题,我们可以更进一步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2018-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多