powershell /将.txt文件合并到csv中,添加日期和文件名

时间:2020-07-24 09:41:54

标签: powershell csv merge multiple-columns add

又是我,就像我昨天提到的那样,我是Powershell的新手(现在是3天),希望您能再次帮助我。

我想要什么: 我想将不同的txt文件合并到一个csv文件中 加上每行添加的内容应以实际日期(yyyy-mm-dd)和文件名开头。

Expectation_Image

WhatIamActuallyGetting_Image

所以我到目前为止所拥有的:

New-Item Shoppinglist_$(get-date -f yyyyMMdd_hhmm).csv -ItemType File
$txtFiles = Get-ChildItem -Name *.txt

$desiredColumns = 'Date','Filename','Substance','Information','Comment'

ForEach ($file in $txtFiles) {
$csv = Import-Csv -path $file -Delimiter "`t"
$outcsv=$csv | Select-Object $desiredColumns

#I Think the mistake is somewhere here, but i habe no idea to fix it. :(
Select-Object *, @{Name = 'Date'; Expression = {(Get-Date -format s)}}
Select-Object *, @{Name = 'Filename'; Expression = {(GetFileName)}}


$outcsv | Export-Csv Shoppinglist_$(get-date -f yyyyMMdd_hhmm).csv -NoTypeInformation -Delimiter ";" -Append 
}

我希望世界上有人可以帮助我。 :)

1 个答案:

答案 0 :(得分:0)

使用计算的属性是正确的,但是对此有些考虑。 同样,Get-ChildItem返回FileInfo或DirectoryInfo对象。 (除非您指定开关-Name,否则它将仅返回路径中项目的名称。)

这些对象具有有用的属性,例如FullName,Name,LastWriteTime等。
由于只希望返回文件,因此可以使用-File开关。

这假定两个输入文件的列与示例中的列完全相同:

# the folder where the input files are and where the output csv file should be saved
$path     = 'D:\Test'
$today    = '{0:yyyy-MM-dd}' -f (Get-Date)
$txtFiles = Get-ChildItem -Path $path -Filter '*.txt' -File

$csv = foreach ($file in $txtFiles) {
        Import-Csv -Path $file.FullName -Delimiter "`t" | 
        Select-Object @{Name = 'Date'; Expression = {$today}},
                      @{Name = 'Filename'; Expression = {$file.Name}}, *
}

$fileOut = Join-Path -Path $path -ChildPath ('Shoppinglist_{0:yyyyMMdd_HHmm}.csv' -f (Get-Date))
$csv | Export-Csv -Path $fileOut -Delimiter ";" -NoTypeInformation

这假设两个输入文件至少具有3个所需的列:“物质”,“信息”和“评论”

# the folder where the input files are and where the output csv file should be saved
$path     = 'D:\Test'
$today    = '{0:yyyy-MM-dd}' -f (Get-Date)
$txtFiles = Get-ChildItem -Path $path -Filter '*.txt' -File

$csv = foreach ($file in $txtFiles) {
        Import-Csv -Path $file.FullName -Delimiter "`t" | 
        Select-Object @{Name = 'Date'; Expression = {$today}},
                      @{Name = 'Filename'; Expression = {$file.Name}}, 
                      Substance, Information, Comment
}

$fileOut = Join-Path -Path $path -ChildPath ('Shoppinglist_{0:yyyyMMdd_HHmm}.csv' -f (Get-Date))
$csv | Export-Csv -Path $fileOut -Delimiter ";" -NoTypeInformation

如果使用的PowerShell版本低于3.0,则不能使用-File开关。而是使用:$txtFiles = Get-ChildItem -Path $path -Filter '*.txt' | Where-Object { !$_.PSIsContainer }