Powershell 使用8.3短名称表示法的递归目录列表

Powershell 使用8.3短名称表示法的递归目录列表,powershell,recursion,scripting,short-filenames,Powershell,Recursion,Scripting,Short Filenames,我有一个PS命令: PowerShell.exe "dir -Verbose -Recurse | Select-Object Mode, Length, Name, Directory | Export-Csv "listing.csv"" 这可以按照我想要的方式给我一个目录列表,但是有一个警告:如果目录结构或文件名最大(我认为是260个字符),它不会在结果csv中列出这个文件,并且会抛出一个错误 有没有人有任何建议使其与8.3符号兼容?我认为这是获取所有文件的唯一方法。我已经处理了很多,不

我有一个PS命令:

PowerShell.exe "dir -Verbose -Recurse | Select-Object Mode, Length, Name, Directory | Export-Csv "listing.csv""
这可以按照我想要的方式给我一个目录列表,但是有一个警告:如果目录结构或文件名最大(我认为是260个字符),它不会在结果csv中列出这个文件,并且会抛出一个错误


有没有人有任何建议使其与8.3符号兼容?我认为这是获取所有文件的唯一方法。

我已经处理了很多,不幸的是,8.3符号在很多情况下仍然不起作用,因为文件名可能仍然超过260个字符。可以使用驱动器挂载来缩短文件名,但这可能有点麻烦。我发现最好的方法是使用一个名为AlphaFS的.NET库来避免这个问题,它没有260个字符的限制,您可以阅读更多或下载它。如果您以前没有直接使用过.NET类,则需要一点时间来适应,但这比尝试奇怪的破解或处理8.3符号要好得多。加载程序集后,将
dir-verbose-recurse
替换为
([Alphaleonis.Win32.Filesystem.Directory]::GetFiles((pwd.path,“*”,“AllDirectories”)
。请注意,这将只获取文件,对于使用相同代码的目录,除了将
GetFiles
替换为
GetDirectories

之外,另一种解决方法是使用类似robocopy的方法来生成列表。或者您可以编写复杂的API包装器代码。幸运的是,这个问题的结局终于在眼前了:(长途跋涉支持)。我将选择这个作为答案,因为,老实说,这是实现这个目标的最佳方式。不幸的是,我不能运行它,因为我们已经决定,它的工作太多,回报太少。谢谢你让我意识到这个问题的复杂性。