gpt4 book ai didi

arrays - 如何从数组列表中删除重复的文件

转载 作者:行者123 更新时间:2023-12-03 01:28:58 25 4
gpt4 key购买 nike

与其他人有些不同。我正在检索文件的数组列表以进行处理(基本上是在本地计算机上处​​理DLL注册),并且我需要我的脚本来正确处理具有相同名称的多个DLL。 select -Unique不起作用,因为从技术上讲文件不是重复的-每个文件都有其唯一的完整路径。

我需要此脚本来检索文件夹(以及子文件夹)中的所有DLL,但仅返回每个命名文件的最后一个实例。例如,如果我有文件:

  • C:\ Path \ Update1 \ GRM.DLL
  • C:\ Path \ Update1 \ HTCP.DLL
  • C:\ Path \ Update2 \ GRM.DLL
  • C:\ Path \ Update3 \ GRM.DLL

  • 该脚本应返回Update3 \ GRM.DLL和Update1 \ HTCP.DLL的对象。
    [System.Collections.ArrayList]$dlls = @(Get-ChildItem -Path $PSScriptRoot -Recurse | Where-Object 
    {$_.Extension -eq ".dll" -and $_.FullName -notmatch 'dll_Old'})

    编辑:与此相关,但是它正在选择显示的第一个实例,而我需要最后一个。在此示例中,这意味着它正在捕获Update1 / GRM.DLL而不是Update3 / GRM.DLL
    $dlls = @(Get-ChildItem -Path $PSScriptRoot -Recurse | Where-Object {$_.Extension -eq ".dll" -and $_.FullName -notmatch 'dll_Old'}) | Select-Object -Unique

    最佳答案

    使用哈希表来跟踪针对特定文件名看到的最后一个文件:

    $files = @{}

    Get-ChildItem -Path $PSScriptRoot -File -Recurse -Filter *.dll |Where-Object FullName -notmatch 'dll_Old' |ForEach-Object {
    $files[$_.Name] = $_
    }

    $uniqueFiles = $files.Values

    关于arrays - 如何从数组列表中删除重复的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59995543/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com