Powershell使用Robocopy列出csv

时间:2016-12-07 20:01:36

标签: powershell robocopy

我被要求提供文件夹及其子文件夹中所有文件的列表。

使用powershell和dos命令的初步努力证明它无法处理超过windows 256字符长度限制的文件和文件夹名称,因此我决定使用robocopy来获取所有文件的列表。

这很有用,但输出记录在文本文件中。大多数输出​​是制表符分隔的,所以我想出了一种方法将其转换为csv。

我遇到的问题是文件大小和日期之间有一个空格。转换为csv后,在excel中打开csv时,“filesize,date和time”都存在于同一列中。我不介意同一列中的日期和时间,但我需要fileszie在它自己的列中。

所以问题是,如何使用powershell命令用“,”(包括双引号)替换filesize和date之间的空格。

我无法替换所有空格,因为某些文件名中可能有空格

希望我尽可能清楚地解释这一点。

TIA

2 个答案:

答案 0 :(得分:0)

所以我知道你的问题是请求RoboCopy,我将在底部给你一个方法来做到这一点,但是处理255个以上的char文件名的最佳方法是使用.net库{{ 3}}。一旦导入模块,获取一组漂亮的对象只是一个方法调用。如果您只需要文件的名称,这将起作用:

[Alphaleonis.Win32.Filesystem.Directory]::GetFiles($path)

如果您需要更多信息,则需要2行

$d = [Alphaleonis.Win32.Filesystem.DirectoryInfo]($path)
$d.GetFiles("*","AllDirectories")

如果您坚持使用RoboCopy,那么您可以随时使用-replace替换带有空格的制表符,然后使用空格分隔符执行convertfrom-csv。

答案 1 :(得分:0)

下面的PowerShell使用robocopy生成一个列为PowerShell对象的目录:

https://gallery.technet.microsoft.com/scriptcenter/Get-Deeply-Nested-Files-a2148fd7

有一篇博文可以随身携带

https://learn-powershell.net/2013/04/01/list-all-files-regardless-of-260-character-path-restriction-using-powershell-and-robocopy/

通过上述内容,您可以:

 Get-FolderItem -Path "<yourpath>" | ConvertTo-Csv