Foreach Удалить файлы / каталоги старше Mins / Days - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь удалить некоторые файлы старше X дней из пользовательских каталогов, поэтому я использую Loop, чтобы просмотреть все домашние диски и нацеливаясь на одну папку, которая мне нужна, чтобы удалить вложенные файлы и подкаталоги старше, чемуказанные дни.В моем сценарии я использую (Get-Date).AddMinutes(-5), поэтому я могу проверить его, затем я изменю его на (Get-Date).AddDays(-60).

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

$mins = (Get-Date).AddMinutes(-5)
$path = "D:\Chrome\User Data" 

foreach ($i in $path) {
    Get-ChildItem -Path $i -Recurse |
    Where-Object { $_.CreationTime -lt $mins } | 
    $i = $_.FullName + "\*\js" + "\*" 
    Remove-Item $path -Recurse -WhatIf
}

Я думаю, что не понял циклпроцесс, похоже, он проходит через все конкретные каталоги и удаляет файлы старше 5 минут.Буду признателен за любую помощь.

    $mins = (Get-Date).AddMinutes(-5)
$path = "D:\Chrome\User Data" 


Get-ChildItem -Path $path -Recurse | Where-Object {$_.CreationTime -lt $mins} |ForEach-Object {
     $path = $_.FullName + "\*\js" + "\*" 
    Remove-Item $path -Recurse -WhatIf
    }

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

1 Ответ

1 голос
/ 13 мая 2019

Давайте разберем ваши требования перед тем, как переписать ваш скрипт:

  1. Найдите папки под $path
  2. Найдите элементы в каждой папке на .\*\js\*
  3. Удалить, если создано более 60 дней назад

Имея это в виду, давайте продолжим и осуществим это:

$threshold = (Get-Date).AddMinutes(-5)
$path = "D:\Chrome\User Data" 

# Loop over each directory in $path
foreach ($folder in Get-ChildItem -LiteralPath $path -Directory) {
  # Construct sub-folder path
  $subPath = Join-Path $folder.FullName "*\js\*"

  # Locate the files at *\js\*
  $files = Get-ChildItem $subPath -Recurse

  # Filter on Creation date
  $files = $files |Where-Object { $_.CreationTime -lt $threshold }

  # Remove files
  $files |Remove-Item -WhatIf
}

Пробный прогон скажет вам, что будет удалено, выньте переключатель -WhatIf в конце, чтобы фактически удалить их

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