我试图在特定文件夹中构建逗号分隔的文件名列表。这些文件往往有长名称(它们是测试案例结果,名称非常具有描述性)。
我发现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中包含(也是?)长名称的完整列表?
答案 0 :(得分:3)
这似乎是一个非常受欢迎的问题,因为它在本网站上被多次询问。无论如何,这里是你的选择:
使用Pinvoke
使用Robocopy
将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脚本。