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可以搭配
通过以上你可以做到:
Get-FolderItem -Path "<yourpath>" | ConvertTo-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可以搭配
通过以上你可以做到:
Get-FolderItem -Path "<yourpath>" | ConvertTo-Csv