【问题标题】:Get all files in folder including those with long (>256 characters) path + name获取文件夹中的所有文件,包括具有长(> 256 个字符)路径+名称的文件
【发布时间】:2016-03-31 07:25:43
【问题描述】:

我正在尝试在特定文件夹中构建一个逗号分隔的文件名列表。这些文件的名称往往很长(它们是测试用例结果,名称非常具有描述性)。

我发现 Get-ChildItem 会忽略名称(包括路径)过长的文件。

# Folder contains the following file (240 chars, actual name is 'only' 210 chars):
# SomeServiceWithAnAlreadyLongNameUnderTest_NameOfTheParticularTestSuiteThatProducedThisResult-NameOfTheActualMethodUnderTest-Given_A_Certain_Precondition_Is_Met_WhenCalling_With_Someparameter_As_SomeValue_Then_Result_Is_Something-Failed.txt
Get-ChildItem *.txt -name
# I would have loved for this to work:
(Get-ChildItem *.txt -name) -join ','

结果不包括文件,因为路径+文件名太长。也没有错误或警告。

作为一种解决方法,我正在使用带有 for: 的 cmd 脚本文件:

for %%a in (%XMLPath%\*.xml) do ( ... build comma separated list with %%a ... )

如何在 Powershell 中包含(太?)长名称的完整列表?

【问题讨论】:

  • 尝试使用 [System.IO.Directory]::GetFiles() 获取路径集合并使用它。
  • 还可以尝试在路径前加上 \\?\
  • PowerShell 是基于 .NET 构建的,不支持长文件路径。看一下这个。 stackoverflow.com/questions/12204186/…
  • 如果您想构建自己的 .NET 程序集(添加类型到您的 PowerShell 脚本中),通过解决 Win32 系统调用来解决此限制,这可能会有所帮助:codeproject.com/Articles/19688/…
  • PowerShell v6.0.0-beta.3 现在默认支持 FYI UNC 路径:stackoverflow.com/a/47046785/1599699

标签: powershell


【解决方案1】:

这似乎是一个非常受欢迎的问题,因为它已在此网站上被多次询问。无论如何,这里有你的选择:

使用 Pinvoke

Boe Prox - Technet

使用 Robocopy

Boe Prox - Technet

将 AlphaFS 与 Powershell V5 和 V4 结合使用

如果你能找到一台装有 PowerShell v5(Windows 10 自带 PS v5)的计算机,你可以安装一个名为 PSAlphaFS 的模块。

Install-Module PSAlphaFS

默认情况下,powershellgallery 中的模块会安装到

C:\Program Files\WindowsPowerShell\Modules

注意:PSAlphaFS 模块也可以在使用 PowerShell V4 的目标系统上运行,但不能在 Powershell V3 上运行。

您可以通过以下方式找到当前运行的 Powershell 版本。

$PSVersionTable.PSVersion

模块安装到位后,您可以 然后运行以下类似于 get-childitem 但没有 260 字符限制的命令。

Get-LongChildItem  -Filter *.txt -Name

【讨论】:

【解决方案2】:

PowerShell v6.0.0-beta.3 及更高版本现在默认支持 UNC 路径;请在此处查看我的答案以获取更多信息:https://stackoverflow.com/a/47046785/1599699

【讨论】:

    【解决方案3】:

    似乎没有直接的方法可以使用 PowerShell 来处理这种情况。对我来说,这意味着 PowerShell 不是这项工作的正确工具,我将改用我的“解决方法”cmd 脚本。

    【讨论】:

    • 这是 .net 框架中的一个限制,而不是在 Powershell 中说的。但是,Powershell 是在 .net 上构建的,所以在某种意义上,Powershell 继承了这个限制。但我不同意,它不是正确的工具。有一些很棒的工具可以用来帮助 Powershell,而不是作为一种解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多