Moving older folders to archive

Welcome Forums General PowerShell Q&A Moving older folders to archive

Viewing 1 reply thread
  • Author
    Posts
    • #97112
      Participant
      Topics: 2
      Replies: 2
      Points: 2
      Rank: Member

      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
    • #97187
      Participant
      Topics: 6
      Replies: 23
      Points: 104
      Helping Hand
      Rank: Participant

      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.

      • #97256
        Participant
        Topics: 2
        Replies: 2
        Points: 2
        Rank: Member

        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
               
        
Viewing 1 reply thread
  • The topic ‘Moving older folders to archive’ is closed to new replies.