#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:
├───Folder1
│ april_logs-0410.txt
│ may_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. См. раздел Измененный сценарий и пример дерева.