Moving older folders to archive

Hi all PowerShell users!
I’m completely noob in powershell so sorry if my question will sound “very stupid” for you.

Situation:
I have a folder that contains patients DICOM-images and I need to move all folders that are older than 31 day to archive in external drive.

I know that’s sound simple but I’m stuck a little.

$Source = 'C:\Vitrea\Patients'
$Destenation = 'D:\PatientsArchive'
$Date = (Get-date.AddDays(-31))
$Directory = Get-ChildItem $Source -Recurse | Where {$_.CreationTime -lt $Date}
Move-Item -Path $Directory -Destination $Destenation

I’m was thinking of using If…Else construct in way like:
If Archive folder exists and if there is some patients to archive then just do it
Else if folder doesn’t exists then create it and archive patients there
Else if folder exists and it’s no patients to archive just don’t do anything.

Problem is…I just don’t know how to do this. A little thought about that:

$Source = 'C:\Vitrea\Patients'
$Destenation = 'D:\PatientsArchive'
$Date = (Get-date.AddDays(-31))
$Directory = Get-ChildItem $Source -Recurse | Where {$_.CreationTime -lt $Date}
    if(Test-Path $Destenation){
    Write-Host "Archiving now"
    Move-Item -Path $Directory -Destination $Destenation
                               }#End if
        Elseif(Test-Path $Destenation){
        New-Item -ItemType Directory -Path $Destenation
        Move-Item -Path $Directory -Destination $Destenation
                                       }#End elseif
    Else{
    Write-Host "Nothing to archive"
        }# end Else
[/PRE]

Any help would be greatly appreciated

There are a few points here:

  1. (Get-Date).AddDays(-31) - the bracket
  2. Elseif(!(Test-Path $Destenation)){
  3. $Directory is a collection, so you should use a foreach (e.g. $item.FullName)
  4. You could try combining the conditions with -and ($directory -ine $null)
  5. You may want to filter or use -File in line 4 above, depending on the directory content.

Hi Emil, thanks for your advise

I was thinking of do it like that

Param(
[String]$Source = 'C:\Vitrea\Patients',
[String]$Destenation = 'D:\PatientsArchive',
[String]$Date = (Get-Date).AddDays(-31),
[String]$Directory = (Get-ChildItem $Source -Recurse | Where {$_.CreationTime -lt $Date})

      )#End Param
    
    if( -not (Test-Path $Destenation)){
       New-Item -ItemType Directory -Path $Destenation
                                       }#end if
    Else{
    Move-Item -Path $Directory -Destination $Destenation    
        }#end Else      

I’m not quite sure how foreach must looks in this script. I will put my suggestion down below because you are right: $Directory is a folder that contains subfolders which contains DICOM-Images. Also thank you for all your tips about brackets and conditions.

Param(
[String]$Source = 'C:\Vitrea\Patients',
[String]$Destenation = 'D:\PatientsArchive',
[String]$Date = (Get-Date).AddDays(-31),
[String]$Directory = (Get-ChildItem $Source -Recurse | Where {$_.CreationTime -lt $Date})

      )#End Param
    
    if( -not (Test-Path $Destenation)){
       New-Item -ItemType Directory -Path $Destenation
                                       }#end if
    Else{
        ForEach ($Folder in $Directory) {
        Move-Item -Path $Folder -Destination $Destenation
                                         }#ForEach    
        }#end Else