Выполнить get-childitem, но выполнить итерацию в обратном порядке? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть папка с 500,00+ файлами.Я пытаюсь перебрать эту папку и запустить некоторую логику, чтобы определить, можем ли мы удалить ненужные файлы.Проблема в том, что этот процесс нужно запускать полурегулярно, а новые файлы, которые необходимо удалить, в настоящее время находятся в конце списка, как кажется.

Я собрал следующий список кода, чтобы отсортировать все это:

gci $RPT | %{
$flag = 0;

$number = [int]($_.Name | select-string -pattern "\d{12}" -Allmatches).Matches.Value

if ($submidlist -match "^$number$"){
    if ($_ -notmatch "acct\.csv|jpd\.csv|jss\.pdf|jman\.pdf|3600\.pdf|cont\.pdf|msl\.txt|pres\.pdf|tray\.pdf|qual\.pdf|zipl\.pdf"){
        echo "DELETE SUBMID $_"
        remove-item $RPT\$_

        $count++
        $totalcount++
        $flag = 1;
    }
}

if ($jobidlist -match "^$number$"){
    if ($_ -match "acct\.csv|jpd\.csv|jss\.pdf|jman\.pdf|3600\.pdf|cont\.pdf|msl\.txt|pres\.pdf|tray\.pdf|qual\.pdf|zipl\.pdf"){
        echo "DELETE JOBID $_"
        remove-item $RPT\$_
        $count++
        $totalcount++
        $flag = 1;
    }
}

}

В настоящее время выполнение вышеуказанного скрипта занимает более 24 часов, и он до сих пор не доходит до концаиз списка.Есть ли способ оптимизировать это или изменить порядок, в котором get-childitem перебирает эту папку?

1 Ответ

0 голосов
/ 30 мая 2019
function Delete-Items($List, [string]$ListName){

    $DoNotDelete = @("acct.csv","jpd.csv","jss.pdf","jman.pdf","3600.pdf","cont.pdf","msl.txt","pres.pdf","tray.pdf","qual.pdf","zipl.pdf")

    $List = $List | %{
        "*$_*"
    }
    Get-ChildItem C:\TEST\56381643\ -Recurse -Include $List -Directory | %{
        Get-ChildItem $_.FullName -Exclude $DoNotDelete -Recurse | %{          
                echo "DELETE $ListName $($_.name | select-string -pattern "\d{12}")"
                Remove-Item -Path $_.FullName -WhatIf
        }
    } 
}

#Example Usage
$JobList = @(
    098765432109
    123456789012

)

$SubmitList = @(
    234567890123
)

Delete-Items -List $JobList -ListName JOBID
Delete-Items -List $SubmitList -ListName SUBMID

Давайте рассмотрим краткое изложение того, что происходит в функции.

У нас есть массив файлов, которые нельзя удалить

Мы превращаем числа $list в символы подстановки, добавляя * до и после каждого элемента в массиве.Затем мы ищем только те каталоги, которые содержат эти номера.

Затем мы используем другой Get-ChildItem to get the files in each directory but exclude the ones mentioned in $ DoNotDelete`.

Если вы хотите удалить файлы, удалите -Whatif на remove-item

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...