проверьте, совпадает ли часть имени файла из папки one в папке two, и выведите оба, если совпадение найдено

#powershell

#powershell

Вопрос:

проверьте, совпадает ли часть имени файла в folderone с частью имени файла в foldertwo.
forex: april_logs-0410.txt in folderone совпадает с april_logs-0310.txt in foldertwo.
Мне нужно увидеть совпадающее полное имя файла в папке два .. например april_logs-0310.txt должно быть напечатано в выходных данных.

 $folderone = Get-ChildItem -Recurse folderone
foreach($file in $folderone)
{
$fileNon = $file.Name -split'(?=-d)' #splits the filename with -0410
$newfile = $fileNon[0] #this has april_logs
If (test-path "d:foldertwo$newfile" -pathtype leaf)) {
write-host "$newfile is in foldertwo"
}
  

Ответ №1:

С заданным деревом:

 > tree a: /f
A:
├───Folder1april_logs-0410.txtmay_logs-0510.txt
│
└───Folder2
        april_logs-0310.txt
  

эта одна строка

 gci Folder1*-[0-9]*|? Name -match '^(.*)-d'|%{(gci Folder2$($matches[1])*).FullName}
  

выдает:

 A:Folder2april_logs-0310.txt
  

Это более подробный и немного другой сценарий:

 ## Q:Test2019410SO_55605777.ps1
$FolderOne = 'A:Folder1'
$FolderTwo = 'A:Folder2'
foreach($File in (
    Get-ChildItem $FolderOne*-[0-9]* |
    Where-Object Name -match '^(.*)-d'|
    Select-Object FullName,@{n='Pattern';e={$Matches[1]}} )){
    if($Found = (Get-ChildItem $FolderTwo$($File.Pattern)*).FullName){
        "{0} is matched by:" -f $File.FullName
         $Found
    }
}
  

выдает:

 > Q:Test20190410SO_55605777.ps1
A:Folder1april_logs-0410.txt is matched by:
A:Folder2april_logs-0310.txt
  

Комментарии:

1. если есть другой файл march_logs-124.txt в папке два , независимо от соответствия ее печати «A:Folder1march_logs-124.txt сопоставляется по:» . попробуйте найти способ ограничить его выводом совпадающих строк только в том случае, если файл сопоставлен. @LotPings

2. добавлено это перед «{0} я сопоставил: ‘If (test-path «$FolderTwo $newfile-*» -лист пути) {‘

3. См. раздел Измененный сценарий и пример дерева.