【问题标题】:Trying pipe in a list of CSV in to import CSV尝试在 CSV 列表中导入 CSV
【发布时间】:2020-03-10 00:17:24
【问题描述】:

所以我试图通过管道将文件列表导入导入 CSV:

ls *.csv | select FullName | where FullName -NotMatch "fixed" | ForEach-Object {
    Import-Csv -Path %($_.FullName) -Delimiter ";"
}

但我收到此错误:

Import-Csv:找不到接受参数的位置参数 'C:\***\Documents\Daraz Order\order.list.export 2019-11-13.csv'。 在行:2 字符:1 + Import-Csv -Path %($_.FullName) -分隔符“;” + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Import-Csv], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.ImportCsvCommand

它对列表中的所有文件给出相同的错误。我已经尝试过ToString() 方法。但错误仍然存​​在:

+ Import-Csv -Path %($_.FullName.ToString()) -分隔符“;” + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Import-Csv], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.ImportCsvCommand

这可能是什么原因?

【问题讨论】:

  • %($_.FullName) 中删除%
  • 我试过这样做我得到A positional parameter cannot be found that accepts argument 'System.Object[]'. 我也试过ToString 方法。同样的错误

标签: powershell


【解决方案1】:

帕特里克给你的答案是正确的。但是,您仍然会收到错误消息。您应该尝试不同的故障排除方法(显然使用 Powershell_ISE)。

$import = @()
ls *.csv| select FullName | where FullName -NotMatch "fixed" | foreach-object {
    $path = $_.FullName
    $path.GetType()
    $path
    try{
        Get-Content -Path $path
    }catch{
        Write-Host "Path does not exist"
    }
    $import += Import-Csv -path $path -delimiter ";"
}

在上面的示例中,为了确保我们不会分心,我们将所有内容放入导入数组中。接下来看路径,是否存在?你能得到文件的内容吗?让我们通过尝试 .GetType() 来查看文件的类型。

该错误基本上表明 Import-CSV 不包括您的论点。因此,请尝试使用有效路径修复 Import-CSV,看看您是否先让它工作。

PS:您的脚本确实可以在我的系统上运行 (PowerShell 5.1)。

【讨论】:

  • 我使用的是 powershell 6。我最终并没有尝试做一行,而是只使用带有变量的代码块,它就可以工作。我稍后会添加答案。
【解决方案2】:

PowerShell 6 似乎有些特殊之处。我只是决定使用代码块和管道。对我有用的代码是:

ls *.csv| select FullName,BaseName | where FullName -NotMatch "fixed"| foreach {
$file = $_.FullName.ToString()
$bname = $_.BaseName.ToString()
$bnamepath = ".\$bname-fixed.csv"
Import-Csv $file -Delimiter ';' | Export-Csv $bnamepath -Delimiter ','
}

我仍然不得不在最后做一个管道,因为将数据保存在一个变量中会导致输出文件只有对象属性,而不是其他 CSV 的值。如果您想在 Excel 中处理文件而不更改系统的区域设置,则此脚本将起作用。

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 2012-04-14
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    相关资源
    最近更新 更多