【问题标题】:How remove duplicates comparing two variables如何删除比较两个变量的重复项
【发布时间】:2022-11-24 05:15:16
【问题描述】:

我有与重复相关的问题。 假设我有这段检查 exe 文件的代码:

$listOfFiles=(Get-ChildItem -Path 'C:\test' -Include "*.exe" -recurse | ForEach-Object {$_.FullName}) 

$paths_regex = "\\[^\\]+$"
$urls_regex = "(http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?"

[void]$table.Columns.Add("Paths")
[void]$table.Columns.Add("Urls")

$table = New-Object System.Data.Datatable

Foreach($file in $listOfFiles)
{
$paths = ""
$urls = ""

strings.exe -n 10 $file | %{ $results += $_+" " }
[regex]::match($results, $paths_regex).Value | %{ $paths += $_+" " }
[regex]::match($results, $urls_regex).Value | %{ $urls += $_+" " }

$pathsNew = ($paths -split ' ' | Select-Object -Unique) -join ' '
$urlsNew = ($urls -split ' ' | Select-Object -Unique) -join ' '

[void]$table.Rows.Add($pathsNew, $urlsNew)
}

有谁知道如何从 $paths 中的 $urls 中删除重复项? 可能我必须将文本拆分为单词并以某种方式进行比较以删除重复项。

谢谢

【问题讨论】:

  • 我之前对$urls.Where{$_ -notin $paths} 的建议对你不起作用吗?如果没有,您能否发布一个示例说明这 2 个变量可能包含的内容?
  • 您能否添加示例输入以及$paths_regex$urls_regex 的值,以便我们可以复制粘贴并自行尝试?我不清楚为什么您的某些网址也是路径。也许可以改进 RegEx 以避免首先出现重复。
  • @AbrahamZinala 这不起作用,因为 -notin 需要收藏对于 RHS 参数,但在本例中 RHS 是一个字符串。
  • 嘿,它没有用,我只是更新了我的代码以获得更清晰的视图。

标签: powershell


【解决方案1】:

正如 zett42 指出的我的错误,您可以将连接的字符串按您加入它们的空间进行拆分以比较内容:

$urls.Split().Where{ $_ -notin $paths.Split() }

此代码仅用于演示目的,但会为您提供所需的输出;在表达式之前拆分字符串会更明智,这样它就不会在每次迭代时拆分它。如果结果对你来说是倒退的话,你可能不得不反转$paths$urls

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 2023-03-24
    • 2013-02-02
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2020-05-08
    相关资源
    最近更新 更多