Скопируйте файлы, расположенные в нескольких вложенных папках, используя поиск в mildmatch - PullRequest
0 голосов
/ 12 июня 2019

Я пытался найти свои проблемы в течение некоторого времени без решения, которое бы соответствовало моим потребностям.Надеюсь, вы сможете мне помочь.

У меня есть несколько подпапок, которые содержат миллионы файлов.Я хотел бы найти в этих подпапках имена файлов, содержащие somerandomtext .

Это то, что у меня есть, но оно ничего не копирует в мою папку $Newlocation.

$Include = @"
20190421
20190422
20190423
20190424
"@

$BaseFolder  = "D:\FoldersContainingFiles"
$NewLocation = "D:\FolderForCopy\"

Get-ChildItem -Path $BaseFolder -Recurse -Include * | 
    Where-Object {$Include -contains $_.BaseName } |
    Copy-Item -Destination $NewLocation

Нет кода ошибки, только файлы не перемещаются.

1 Ответ

2 голосов
/ 12 июня 2019

Ваш код выдаст только те файлы, которые названы в точности так, как в примере с вашей переменной, а именно:

20190421
20190422
20190423
20190424

И это ни при каких обстоятельствах не является допустимым именем файла.

Я не уверен, что вы имеете в виду под mildmatch. Если вы имеете в виду, что имя файла ваших файлов среди прочего содержит дату, это решит вашу задачу:

$Include = "20190421|20190422|20190423|20190424"
$BaseFolder  = "D:\FoldersContainingFiles"
$NewLocation = "D:\FolderForCopy\"

Get-ChildItem -Path $BaseFolder -recurse  | 
    Where-Object {$_.BaseName -match $Include }|
    Copy-Item -Destination $NewLocation

Если ваше имя файла точно такое же, как и в вашей переменной, вы можете использовать это регулярное выражение вместо:

$Include = "^(20190421|20190422|20190423|20190424)$"

Остальной код такой же.

...