使用 Powershell 将列导出到 CSV

Using Powershell to export to CSV with columns

我正在尝试编写一个简单的脚本,将文件名和所述文本文件的内容提取到一个 CSV 文件中。我能够很好地提取所有信息,但它没有拆分成 CSV 文件中的不同列。当我在 excel 中打开 CSV 文件时,所有内容都在第一列中,我需要将两位信息分成不同的列。到目前为止,我的工作代码如下:

$Data = Get-ChildItem -Path c:path -Recurse -Filter *.txt |
where {$_.lastwritetime -gt(Get-Date).addDays`enter code here`(-25)}

$outfile = "c:path\test.csv" 
rm $outfile

foreach ($info in $Data) {
    $content = Get-Content $info.FullName
    echo "$($info.BaseName) , $content" >> $outfile
}

我想出了如何按行分隔信息,但我需要按列分隔。我是 Powershell 的新手,似乎无法通过这个小减速带。任何投入将不胜感激。提前致谢!

输出:

Itm# , TextContent

Itm2 , NextTextContent

我需要的:

Itm# | Text Content | 

Itm2 | NextTextContent |

你的意思是这样的吗?

Get-ChildItem -Path C:\path -Recurse -Filter *.txt | 
  Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-25) } | ForEach-Object {
  New-Object PSObject -Property @{
    "Itm#" = $_.FullName
    "TextContent" = Get-Content $_.FullName
  } | Select-Object Itm#,TextContent
} | Export-Csv List.csv -NoTypeInformation

除了一些语法错误外,您的代码似乎按预期工作。如果您在 Excel 中遇到文本导入问题,我担心。我稍微修改了您的代码,但它在功能上与您的代码相同。

$Data = Get-ChildItem -Path "C:\temp" -Recurse -Filter *.txt |
    Where-Object {$_.LastWriteTime -gt (Get-Date).addDays(-25)}

$outfile = "C:\temp\test.csv" 
If(Test-Path $outfile){Remove-Item $outfile -Force}

foreach ($info in $Data) {
    $content = Get-Content $info.FullName
    "$($info.BaseName) , $content" | Add-Content $outfile
}

我不知道你的 Excel 是什么版本,但请查找文本导入向导。

Excel 将处理以 bij 分隔的 csv 文件中的数据;作为单个列。 我总是在 export-csv 或 convertto-csv 上使用 -delimiter 开关将其设置为分隔符。