Powershell - 从列表中搜索文件 - 仅显示匹配项时出现问题

Powershell - Search for files from list - Trouble displaying just the match

我有一个脚本,用于从列表中跨多个驱动器搜索数百个文件。它工作正常,因为它捕获了所有匹配项。唯一的问题是我需要查看它与扩展名匹配的文件。 有点背景故事... 我们有与 Copybook 同名的程序。在大型机世界中并不少见。搜索文件时,我必须对搜索使用通配符才能捕获所有同名文件(减去扩展名)。然后我必须手动搜索命中以确定它们是字帖还是程序。 当我尝试向下面的脚本添加任何逻辑时,它会显示整个文件名数组,而不仅仅是实际匹配项。 任何人都可以协助捕获和显示匹配的文件及其扩展名吗?也许它也是位置?

此致, -罗恩

#List containing file names must be wilcarded FILE.*

#Parent folder (Where to begin search)
    $folder = 'C:\Workspace\src'
#Missing Artifacts Folder (Where Text file resides)
    $Dir2 = 'C:\Workspace\Temp'
#Text File Name
    $files=Get-Content $Dir2\FilesToSearchFor.txt

    cd \
    cd $folder

    Write-Host "Folder: $folder"
    # Get only files and only their names
     $folderFiles = (Get-ChildItem -Recurse $folder -File).Name
    foreach ($f in $files) {
       #if ($folderFiles -contains $f) { 
       if ($folderFiles -like $f) { 
            Write-Host "File $f was found." -foregroundcolor green
        } else { 
            Write-Host "File $f was not found!" -foregroundcolor red 
        }
    }

不是测试整个文件名列表是否包含目标文件名 ($folderFiles -like $f),而是将所有文件加载到哈希表中,然后使用 [=12] 测试目标文件名是否作为键存在=]:

$fileTable = @{}
Get-ChildItem -Recurse $folder -File |ForEach-Object {
  # Create a new key-value entry for the given file name (minus the extension) if it doesn't already exist
  if(-not $fileTable.ContainsKey($_.BaseName)){
    $fileTable[$_.BaseName] = @()
  }
  # Add file info object to the hashtable entry
  $fileTable[$_.BaseName] += $_
}

foreach($f in $files){
  if($fileTable.ContainsKey($f)){
    Write-Host "$($fileTable[$f].Count) file(s) matching '$f' were found." -ForegroundColor Green
    foreach($file in $fileTable[$f]){
      Write-Host "File with extension '$($file.Extension)' found at: '$($file.FullName)'"
    }
  }
  else {
    Write-Host "No files found matching '$f'"
  }
}

由于 $fileTable 不仅包含名称,还包含对具有由 Get-ChildItem 返回的名称的原始文件信息对象的引用,您可以轻松访问相关元数据(如 Extension 属性) 现在