我正在尝试编写一个简单的脚本,将文件名和所述文本文件的内容提取到 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 |
除了一些语法错误之外,您的代码似乎按预期工作。我担心您在 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,但请查找文本导入向导。
你的意思是这样吗?
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 将处理以 bij ; 分隔的 csv 文件中的数据。作为单列。 我总是使用 Export-csv 或 Convertto-csv 上的 -delimiter 开关将其设置为分隔符。
这是因为您使用的是 Out-File 而不是 Export-Csv。