使用 8.3 短名称表示法的递归目录列表
Recursive directory listing with 8.3 shortname notation
我有一个PS命令:
PowerShell.exe "dir -Verbose -Recurse | Select-Object Mode, Length, Name, Directory | Export-Csv "listing.csv""
这可以为我提供一个以我想要的方式列出的目录,但有一个警告:如果目录结构或文件名超出最大值(我认为它有 260 个字符),它不会在生成的 csv 中列出该文件,并且它抛出一个错误。
有没有人有任何建议使它与 8.3 表示法兼容?我认为这是获取所有文件的唯一方法。
我已经处理过很多次了,不幸的是 8.3 表示法在很多情况下仍然不起作用,因为文件名仍然可能超过 260 个字符。可以使用驱动器安装来缩短文件名,但这可能有点麻烦。我发现的最佳方法是使用没有 260 个字符限制的名为 AlphaFS 的 .NET 库来规避该问题,您可以阅读更多内容或下载它 here。如果您以前没有直接使用过 .NET 类,那么需要一点时间来适应,但它比尝试奇怪的技巧或处理 8.3 符号要好得多。加载程序集后,您可以将 dir -verbose -recurse
替换为 ([Alphaleonis.Win32.Filesystem.Directory]::GetFiles((pwd).path,"*","AllDirectories"))
。请注意,这只会获取文件,对于您使用相同代码的目录,除了将 GetFiles
替换为 GetDirectories
我有一个PS命令:
PowerShell.exe "dir -Verbose -Recurse | Select-Object Mode, Length, Name, Directory | Export-Csv "listing.csv""
这可以为我提供一个以我想要的方式列出的目录,但有一个警告:如果目录结构或文件名超出最大值(我认为它有 260 个字符),它不会在生成的 csv 中列出该文件,并且它抛出一个错误。
有没有人有任何建议使它与 8.3 表示法兼容?我认为这是获取所有文件的唯一方法。
我已经处理过很多次了,不幸的是 8.3 表示法在很多情况下仍然不起作用,因为文件名仍然可能超过 260 个字符。可以使用驱动器安装来缩短文件名,但这可能有点麻烦。我发现的最佳方法是使用没有 260 个字符限制的名为 AlphaFS 的 .NET 库来规避该问题,您可以阅读更多内容或下载它 here。如果您以前没有直接使用过 .NET 类,那么需要一点时间来适应,但它比尝试奇怪的技巧或处理 8.3 符号要好得多。加载程序集后,您可以将 dir -verbose -recurse
替换为 ([Alphaleonis.Win32.Filesystem.Directory]::GetFiles((pwd).path,"*","AllDirectories"))
。请注意,这只会获取文件,对于您使用相同代码的目录,除了将 GetFiles
替换为 GetDirectories