Powershell 输出文件 csv 定界

Powershell out-file csv delimiting

我有一个使用 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,它只返回路径的字符串长度。

有什么建议吗?

我假设您需要列出某个文件夹下的所有文件。您可以使用 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 删除不匹配(空)行和 ForEach-Object使用 $Matches 创建具有命名属性的对象,该 -match 运算符在 Where-Object.

中使用