Исключение родительского каталога, если любой файл новый - PullRequest
0 голосов
/ 29 марта 2019

У моей компании есть отдельные папки в общем ресурсе для каждого проекта, над которым они работают, и если за последние шесть месяцев не было затронуто ни одного файла в одной из этих папок или его подпапок, я хочу переместить их в место архивирования. Если какой-либо один файл в папке или любой из ее подпапок был изменен за последние шесть месяцев, я хочу пропустить весь родительский каталог. Сейчас я в основном там, но моя текущая итерация пропускает только отдельные файлы, и я не уверен, как указать, как пропустить весь родительский элемент. Вот мой текущий сценарий:

$Date = (Get-Date).AddMonths(-6)
$Source = 'C:\Scripts\Source'
$Dest = 'C:\Scripts\Test Target'

Get-ChildItem $Source -File -Recurse | Where {$_.LastWriteTime -lt $Date} | ForEach {

    $actualSource = Split-Path $_.FullName
    $actualDest = Split-Path $_.FullName.Replace($source,$dest)

    robocopy $actualSource $actualDest $_.Name /SEC

}

При использовании моих тестовых каталогов у меня есть папка C: \ Scripts \ Source \ Drivers. Сценарий копирует эту папку «Драйверы» так, как я хочу, но если я помещу более новый файл в эту папку «Драйверы», я хочу пропустить всю папку. В настоящее время папка и все, что старше шести месяцев в папке, все еще копируется, и она просто пропускает отдельные файлы, которые являются более новыми.

Пожалуйста, дайте мне знать, если потребуется дополнительная информация.

1 Ответ

0 голосов
/ 29 марта 2019

Просто возьмите свою копию и повторите заявление на один уровень выше. Сначала вы хотите перебрать все родительские папки. Затем для каждой родительской папки выполните рекурсию и проверьте, есть ли какие-либо измененные файлы, если они есть, затем скопируйте папку:

$Date = (Get-Date).AddMonths(-6)
$Source = 'C:\Scripts\Source'
$Dest = 'C:\Scripts\Test Target'

$ParentFolders = Get-ChildItem $Source -Directory
Foreach($Folder in $ParentFolders){
  $NewFiles = Get-ChildItem $Folder -File -Recurse | Where {$_.LastWriteTime -lt $Date}
  if($NewFiles.Count -eq 0)
  {
    #Archive
    robocopy $Folder $Dest /SEC
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...