我被要求提供文件夹及其子文件夹中所有文件的列表。
使用powershell和dos命令的初步努力证明它无法处理超过windows 256字符长度限制的文件和文件夹名称,因此我决定使用robocopy来获取所有文件的列表。
这很有用,但输出记录在文本文件中。大多数输出是制表符分隔的,所以我想出了一种方法将其转换为csv。
我遇到的问题是文件大小和日期之间有一个空格。转换为csv后,在excel中打开csv时,“filesize,date和time”都存在于同一列中。我不介意同一列中的日期和时间,但我需要fileszie在它自己的列中。
所以问题是,如何使用powershell命令用“,”(包括双引号)替换filesize和date之间的空格。
我无法替换所有空格,因为某些文件名中可能有空格
希望我尽可能清楚地解释这一点。
TIA
答案 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
有一篇博文可以随身携带
通过上述内容,您可以:
Get-FolderItem -Path "<yourpath>" | ConvertTo-Csv