2015-05-13 62 views
1

我想做一个简单的脚本,将文件的名称和所述文本文件的内容拉入CSV文件。我能够将所有信息都足够好,但不会将其分成CSV文件中的不同列。当我在excel中打开CSV文件时,所有内容都位于第一列,我需要将两位信息分隔为不同的列。到目前为止我的工作代码如下:使用Powershell导出到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 | 
+0

我_really_想看到一些示例输出。有几种方法可以解释你的输出应该是什么样子。 – Matt

+0

不幸的是,我无法发布输出的照片。截至目前,尽管它在同一列中显示了数据之间的逗号。我需要的是将数据按列分隔。 – Munchie

+0

如果您的数据已经是逗号,我在这里没有看到问题?当你在记事本中打开它看起来是否正确?您可能只是在Excel中进行不正确的文本导入。 – Matt

回答

0

除了一些语法错误,您的代码似乎按预期工作。我担心你是否在使用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,但看看文本导入向导。

+0

谢谢马特!我还是Powershell的新手,我已经通过调整我的代码来修复我的代码和你的代码之间的语法错误差异,并且它似乎解决了这个问题。现在一切都在正确的列! – Munchie

0

你的意思是这样的?

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 
0

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