我有一个使用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
,它只返回路径的字符串长度。
有什么建议吗?
答案 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
创建具有命名属性的对象。