Powershell 使用 Robocopy 列出 csv 中的文件

Powershell using Robocopy to list files in csv

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

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

效果很好,但输出记录在文本文件中。大部分输出都是制表符分隔的,所以我想出了一种将其转换为 csv 的方法。

我遇到的问题是文件大小和日期之间有一个 space。转换为 csv 后,当 csv 在 excel 中打开时,"filesize, date and time" 全部存在于同一列中。我不介意日期和时间在同一列中,但我需要 fileszie 在其自己的列中。

所以问题是,如何使用 powershell 命令将文件大小和日期之间的 space 替换为“,”(包括双引号)。

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

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

TIA

所以我知道你的问题是请求 RoboCopy,我会在底部为你提供一种方法,但我认为处理 255+ 字符文件名的最佳方法是使用 .net 库 AlphaFS。导入模块后,只需调用一个方法即可获得一组不错的对象。如果您只需要文件的名称,这将起作用:

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

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

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

如果您坚持使用 RoboCopy,那么您始终可以执行 -replace 将制表符替换为 spaces,然后执行带有 space 分隔符的 convertfrom-csv。

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

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

有个博客post可以搭配

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