仅从文件夹中的30个不同文件中提取powershell中csv文件的前10行[重复]

问题描述 投票:1回答:2

我在一个文件夹(文件夹A)中有300多个.csv文件,其中分别包含计算机信息(机器名称,HD大小,内存等),所有文件都位于单独的行上。标头是项目和值。

我需要从文件夹中每个文件中提取前25行,并将其放入一个csv文件中。

Get-Content "C:\folder\A\*.csv" | select -First 25 | Out-file "C:\folder\B\.csv" 

这很好,但是如何使它适用于文件夹A中的所有文件?

powershell csv
2个回答
0
投票

如果您的30/300? CSV文件包含10/25?名称,值对,将它们组合成单个csv文件没有多大用处;除非它们是统一且独特的,并且因此可以被视为哈希表,并转换为输入[PSCustomObject]

因此,您输入的csv如下所示:

|PCone.csv           |PCtwo.csv           |PChree.csv          |
+--------------------+--------------------+--------------------+
|item,value          |item,value          |item,value          |
|machine name,PCone  |machine name,PCtwo  |machine name,PCthree|
|HD size,250GB       |HD size,1TB         |HD size,1TB         |
|memory,8192         |memory,16384        |memory,16384        |

此脚本:

## Q:\Test\2019\02\05\SO_54523916.ps1
$Columns = @("machine name","HD size","memory")

$AllCsv = foreach($csv in Get-ChildItem pc*.csv){
    [pscustomobject](ConvertFrom-StringData -StringData (
                     (Get-Content $Csv -raw) -replace ',', "="))
}

$AllCsv | Select-Object $Columns

产生此输出:

machine name HD size memory
------------ ------- ------
PCone        250GB   8192
PCthree      1TB     16384
PCtwo        1TB     16384

0
投票

请参见this answer以获取纯文本处理解决方案。


关于您尝试了什么

Get-Content "C:\folder\A*.csv" | select -First 25

这不会从each文件中提取25行,而是从与匹配通配符表达式(A*.csv)的all文件中收集行,然后提取single 25个元素从一开始就切成薄片。

另外,为了输出到单个 CSV输出文件:

  • 您必须确保仅one标头行(带有列名的行)被写入输出文件。

  • 此标题行之后必须跟着每个文件中的25 data行,即编号为2到26的行。

© www.soinside.com 2019 - 2024. All rights reserved.