Powershell out-file csv delimiting

时间:2015-06-09 19:48:19

标签: powershell csv delimiter robocopy

我有一个使用robocopy列出文件的powershell命令。我试图输出到csv但它不会根据需要分隔列。我得到两列应该有5.是out-file csv的分隔符参数吗?

以下是当前代码:

robocopy .\Documents\ NULL /L /S /V /E /BYTES /FP /NC /NDL /XJ /TS /R:1 /W:2 | Out-File -Append -FilePath "c:\beehive_20150608.csv" -Encoding ASCII

我尝试了export-csv,它只返回路径的字符串长度。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我假设您需要列出某个文件夹下的所有文件。您可以使用Get-ChildItem -Recurse代替robocopy,仅使用Where-Object过滤文件,然后仅使用Select-Object选择所需的媒体资源:

Get-ChildItem .\Documents -Recurse | Where-Object {!$_.PsIsContainer}| Select-Object -property LastWriteTime,Length,FullName | Export-Csv aaa.csv

如果您需要使用robocopy,可以尝试解析它的输出:

robocopy .\Documents\ NULL /L /S /V /E /BYTES /FP /NC /NDL /XJ /TS /R:1 /W:2 /njh /njs | Where-Object {$_ -match '^\s*([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+(.*?)\s*$'} | ForEach-Object { new-object PSObject -property @{Length=$matches[1];Date=$matches[2];Time=$matches[3];Name=$matches[4]}} | Export-Csv aaa.csv

它很难看,但应该做你需要的。我在您的命令行中添加了/njh/njs个参数来取消robocopy的页眉和页脚,Where-Object删除了不匹配(空)的行和{{ 1}}使用由ForEach-Object中使用的$Matches运算符创建的-match创建具有命名属性的对象。