gpt4 book ai didi

powershell - 在 Powershell 中返回第一个匹配的文件夹

转载 作者:行者123 更新时间:2023-12-04 15:11:05 29 4
gpt4 key购买 nike

我有一个 ID 数组,在一个共享中有对应的目录:

$ids = @('12345','25356','74678')
- C:
-- 2020
--- 12345678 SURNAME
---- 12345
----- 12345_SubDir01
----- 12345_SubDir[n]
--- 23648844 SURNAME
---- 25256
----- 25256_SubDir01
----- 25256_SubDir[n]

我想遍历字母 C: 中的所有目录并找到第一个匹配项(ID 不是子目录的 ID)。所以我想匹配 12345 而不是 12345_SubDir01

到目前为止,我发现的行(虽然效率低下)有效,但会继续搜索,直到它遍历根目录共享中的每个目录(我们有超过 500,000 个文件夹和子文件夹)。

我正在使用的脚本行:

Get-ChildItem C: -Recurse | Where-Object {$_.PSIsContainer -eq $true -and $_.Name -match "12345" }

有没有办法让脚本在与 ID 匹配后停止,以便在找到目录后不再继续搜索?

我希望能够在脚本的后半部分使用输出路径,但是每次 ID 匹配需要大约 20 分钟才能传递下去。

最佳答案

学分转到Doug Maurer对于 |选择对象 -First 1docs可以更清楚的是,一旦收到指定数量的输入对象(在我们的例子中,当找到第一个匹配的名称时),管道实际上将退出

Get-ChildItem C:\ -Directory -Recurse | Where-Object -Property Name -eq 12345 | Select-Object -First 1

进一步改进:

  • 在这个简单的例子中,我们可以通过仅使用参数而不是 Where-Object 的脚本 block 来使一切变得更加简洁。

    Get-ChildItem -Directory 限制对目录的检索。类似地,还有 -File。请注意,这些需要 PS v3+。对于较旧的 PS 版本,可以查询 $_.PSIsContainer,如问题中所示。

  • 确保将反斜杠附加到 C:。如果不带反斜杠传递驱动器,您将只在驱动器的当前目录 中搜索!试试看:cd c:\windows;获取 ChildItem C:。您将列出“windows”目录的内容。反斜杠解决了这个问题,因为您现在指定的是根目录,而不仅仅是驱动器。

  • 使用运算符 -eq 进行精确(不区分大小写)匹配。使用运算符 -match 您会得到不需要的 12345_SubDir01 匹配项,因为 -match 默认执行子字符串搜索。

关于powershell - 在 Powershell 中返回第一个匹配的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65190375/

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