我在一个文件夹(文件夹A)中有300多个.csv文件,其中分别包含计算机信息(机器名称,HD大小,内存等),所有文件都位于单独的行上。标头是项目和值。
我需要从文件夹中每个文件中提取前25行,并将其放入一个csv文件中。
Get-Content "C:\folder\A\*.csv" | select -First 25 | Out-file "C:\folder\B\.csv"
这很好,但是如何使它适用于文件夹A中的所有文件?
如果您的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
请参见this answer以获取纯文本处理解决方案。
关于您尝试了什么:
Get-Content "C:\folder\A*.csv" | select -First 25
这不会从each文件中提取25行,而是从与匹配通配符表达式(A*.csv
)的all文件中收集行,然后提取single 25个元素从一开始就切成薄片。
另外,为了输出到单个 CSV输出文件:
您必须确保仅one标头行(带有列名的行)被写入输出文件。
此标题行之后必须跟着每个文件中的25 data行,即编号为2到26的行。