PowerShell - 无法通过子目录递归搜索 [LIKE] 文件名

PowerShell - Unable to Search for [LIKE] File Names recursively through sub-directories

我有一个需要搜索的数百个文件的列表。大多数没有文件扩展名,有些有。如果必须的话,我可以将这些和 运行 作业分开多次。

我有一个脚本,我一直在努力使它正确,但它似乎不起作用。 我只需要匹配文件名而不是扩展名。
我正在使用“-Like”选项,但这并没有得到我需要的结果。如果我包含一个文件扩展名,那么它就可以工作。不幸的是,我有许多扩展名未知的文件名,我只需要匹配名称即可。

此外,该脚本似乎没有扫描子目录以查找匹配项。 -Recurse 在我的示例中不起作用吗?

最后,在测试和我强制匹配时,它不显示找到匹配项的子目录。

非常欢迎任何帮助。 问候, -罗恩

#Start in this DIR
 $folder = 'C:\Workspace\' 
#Get the file list here
 $Dir2 = 'C:\Workspace\'
 $files=Get-Content $Dir2\MISSING_BMS.txt

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

Get-ChildItem-Name 开关在与 -Recurse 组合时不只是输出 names,它输出子目录内项目的相对路径

因此,最好不要使用此开关,并与 [System.IO.FileInfo] 个实例的 .Name 属性 进行比较 Get-ChildItem 默认发出。

# Get only files and only their names - note the use of (...).Name
$folderFiles = (Get-ChildItem -Recurse $folder -File).Name

请注意,如果您的 $Dir2\MISSING_BMS.txt 文件包含 逐字 文件名而不是 通配符模式 ,您应该使用 -contains operator rather than -like, the wildcard matching operator.

此外,如果您以后需要访问完整路径:

# Get the files as [System.IO.FileInfo] instances
$folderFileInfos = Get-ChildItem -Recurse $folder -File

# ...

# Access the .Name property now, using member enumeration, and see 
# if the array of names contains $f
if ($folderFileInfos.Name -contains $f) { ...