根据文件名将新的第一列添加到 CSV

Add new 1st column to CSV based on filename

我有一个包含 500 个 CSV 的文件夹,每个 CSV 应用程序有 80.000 行。我需要在第一列中添加日期(基于文件名)。

我从各种样本中提取的脚本几乎完成了它应该做的事情。它为文件夹中的每个文件创建一个新文件,在第一个位置有一个新列,名称正确 header 但此列中的所有行都是空的。

文件名示例:2020-03-31_xxxxxxxx.csv

如果有人能看看这个就好了。

$items = Get-ChildItem -Path "C:\Temp\Data\*.csv"

for ($i=0; $i -lt $items.Count; $i++)

{

$outfile = $items[$i].FullName + "out"

Import-Csv $items | 

Select-Object @{Name='Date';Expression={Get-ChildItem -Name $items.Name.SubString(0,9)}},* | 
Export-Csv -NoTypeInformation -delimiter ";” $outfile

}

同样在导出中应该是一个转换,因为 CSV 中没有“”,但我也无法添加它,而不会出错。

(ConvertTo-Csv -NoTypeInformation -delimiter ";”) | Foreach-Object { $_ -replace  '"', '' } | Out-File $outfile

试试这个:

$items = Get-ChildItem -Path "C:\Temp\Data\*.csv" 
for ($i=0; $i -lt $items.Count; $i++) { 

$outfile = $items[$i].FullName + "out" 

Import-Csv $items[$i] | Select-Object @{n='Date';e={$items[$i].Fullname.ToString().Split("_")[0]}},* | Export-Csv -NoTypeInformation -delimiter ";” -Force $outfile 
}

您不是在选择日期,而是在获取每个文件的子项目信息。所以你得到了丑陋的 csv 格式。此外,您一次导入所有 csv,而不是一个。

感谢 Wasif Hasan,我最终得到了这段代码。 不需要删除引号,因为 CSV 中有文本字段,如果我尝试删除引号会中断:

$items = Get-ChildItem -Path "C:\Temp\Data\*.csv" 
for ($i=0; $i -lt $items.Count; $i++) { 

$outfile = $items[$i].FullName + "out" 

$delimiter = ';'

Import-Csv $items[$i] -delimiter $delimiter | Select-Object @{n='Date';e= 
{$items[$i].Basename.ToString().Split("_")[0]}},* |  Export-Csv - 
NoTypeInformation -delimiter $delimiter -Force $outfile 

}