获取文件夹中的所有文件,包括具有长(> 256个字符)路径+名称的文件

时间:2015-12-25 03:19:44

标签: powershell

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

我发现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 ','

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

作为一项解决方案我使用cmd脚本文件for:

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

我怎样才能在Powershell中包含(也是?)长名称的完整列表?

3 个答案:

答案 0 :(得分:3)

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

使用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 char限制。

Get-LongChildItem  -Filter *.txt -Name

答案 1 :(得分:1)

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

答案 2 :(得分:0)

使用PowerShell似乎没有直接的方法来处理这种情况。对我而言,这意味着PowerShell不适合这项工作,我将使用我的“解决方法”cmd脚本。