【问题标题】:Import specified columns from CSV, by header name, and export to new file按标题名称从 CSV 导入指定列,并导出到新文件
【发布时间】:2017-07-23 20:36:56
【问题描述】:

我想制作一个 ps1,将文件夹中的所有 .csv 文件取出,提取 2 列下的所有值(由标题标识),然后为每个只有这两列的文件生成新的 .csv。

我可以让它在下面的单个文件上工作,但是当我添加通配符时,它说函数不适用于多个文件。我尝试过其他方法,但我没有正式的 CS 背景(所以我下面的“脚本”可能看起来很简陋);我接近了,但到目前为止没有任何效果。

$inputpath = 'C:/Users/AAA/AAA/AAA/AAA/'
$inputfile = 'BBB.csv'
$outputpath = $inputpath
$outputfile = $inputfile.basename + 'edited' + '.csv'

Import-Csv $inputpath$inputfile |
    select COLUMNtitle1, COLUMNtitle2 |
    Export-Csv -Path $outputpath$outputfile -NoTypeInformation

echo

【问题讨论】:

  • 你期待看到什么,你看到了什么?

标签: powershell csv export-to-csv import-csv


【解决方案1】:

由于您没有将Get-ChildItem 用于$inputfile,因此没有basename 属性。此外,在连接路径时使用Join-Path 更安全,最好避免使用+ 连接字符串。

$inputfolder = 'C:\Users\AAA\AAA\AAA\AAA\'
Get-ChildItem $inputfolder -include *.csv | % {
    $outputpath = Join-Path $inputfolder "$($_.basename)edited.csv"
    Import-Csv $_.fullname | select COLUMNtitle1,COLUMNtitle2 | Export-Csv -Path $outputpath -NoTypeInformation
}

【讨论】:

  • 谢谢 BenH。这很有帮助。两个问题: 1:我必须更改 $inputobject = Get-ChildItem $inputfolder 然后它一口气运行了所有 .csv。这会将所有结果放入一个 .csv 输出中,这很好,但是我将如何编写它来创建一个与每个输入相对应的单独 .csv? 2. 此外,输出 .csv 文件只是命名为“edited.csv”。 $($inputobject.basename),我假设是因为输入文件不止一个?
  • @physlexic 答案已编辑以处理文件夹中的所有文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多