gpt4 book ai didi

powershell - 如何使用 PowerShell 获取部分文件名列表并返回完整文件名列表

转载 作者:行者123 更新时间:2023-12-02 22:57:22 25 4
gpt4 key购买 nike

我想知道如何使用 PowerShell 获取部分文档名称列表并返回完整文档名称列表。

我有大量文档需要处理。我们有一个命名方案:HG-xx-xx-###

实际文件的完整命名方案是:HG-xx-xx-###.x.x_File_Name

我有很多不同的文件名列表,如下所示:

HG-SP-HG-001

HG-WI-BE-005

HG-GD-BB-043

我正在尝试让程序返回完整文件名的列表,如下所示:

HG-SP-HG-001.1.6_示例

HG-WI-BE-005.1.0_示例

HG-GD-BB-043.1.1_示例

我已经包含了我尝试过的两种方法。我给它一个列表,甚至只是一个部分文件名,但我什么也得不到。

我已经尝试了两种不同的方法,但我的编程和谷歌搜索能力已经到了尽头,有什么想法吗?

$myPath = 'P:\'


$_DocList = READ-HOST "Enter list of document ID's"

$_DocList = $_DocList.Split(',').Split(' ')


#Here I'm not sure if I should do it like so:

$output =

ForEach($_Doc in $_DocList)
{
$find = gci $myPath -Recurse |where{$_.name -contains $($_Doc)}
Write-Host "$find"
}

$output | clip


#or like this:

$_DocList | ForEach-Object

{

gci -Path $myPath -Filter $_ -Recurse

$info = Get-ChildItem $_.FullName | Measure-Object
if ($info.Count -ne 0) {
Write-Output "$($_.Name)"
}
} | clip

最佳答案

Doug Maurer's helpful answer显示了基于通配符模式的解决方案,该模式基于 -Filter 参数。由于此参数仅接受单个 模式,因此必须在循环<中调用Get-ChildItem -Recurse 调用多次/em>.

但是,由于您正在使用 -Recurse,您可以利用 -Include 参数,它接受多个模式,所以你可以逃脱一个 Get-ChildItem打电话。

虽然对于单个 Get-ChildItem 调用 -Filter-Include 执行得更好,但单个 Get-ChildItem -Include 使用 array 模式的调用可能优于多个 Get-ChildItem -Filter 调用,尤其是对于许多模式。

# Sample name prefixes to search for.
$namePrefixes = 'HG-SP-HG-001', 'HG-WI-BE-005', 'HG-GD-BB-043'

# Append '*' to all prefixes to form wildcard patterns: 'HG-SP-HG-001*', ...
$namePatterns = $namePrefixes -replace '$', '*'

# Combine Get-ChildItem -Recurse with -Include and all patterns.
# .Name returns the file name part of all matching files.
$names = (Get-ChildItem $myPath -File -Recurse -Include $namePatterns).Name

关于powershell - 如何使用 PowerShell 获取部分文件名列表并返回完整文件名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64685515/

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