Forum Discussion

marco69's avatar
marco69
Copper Contributor
Dec 07, 2022

.ps1 script: how to loop in a range of dates

Hi all,

I have to copy the content of the folders:

 

C:\mypath\YYYYDDMM\myfolder1

 

into one folder destination.

 

And: YYYYMMDD is from 20140101 to 20211231

 

I'm struggling to find a way to increment day by day my loop, extract day.month.year from the date and then compose the new string for my path......

 

can somebody help me?

 

thanks!!!

  • Just tested this script, this works:

    foreach ($folder in Get-ChildItem -Path c:\mypath -Directory | Sort-Object Name) {
        try {
            Test-Path "$($folder.fullname)\myfolder1" -ErrorAction Stop | Out-Null
            Copy-Item "$($folder.fullname)\myfolder1" -Recurse -Destination C:\destpath\myfolder1 -Force:$true -Confirm:$false -ErrorAction Stop
            Write-Host ("Processing {0}" -f $folder.fullname) -ForegroundColor Green
        }
        catch {
            Write-Warning ("Folder myfolder1 not found in {0} or not enough permissions" -f $folder.FullName)
        }
    }

     

    Source directory:


    Destination directory:

    It will check permissions and copy if it has permissions and will overwrite if the file is already present, it will show a warning if the folder1 folder was not found in a directory.

     

    You can test it for yourself with a test directory structure 🙂 

     

  • If all myfolder1 folders are in the base of YYYYDDMM in the c:\mypath folders... Then you could just get a list of folders and loop through them if the myfolder1 folder is found, then copy all items to the one folder destination.

    foreach ($folder in Get-ChildItem -Path c:\mypath -Directory) {
    if (test-path $folder.fullname\myfolder1) {
    copy-item -path $folder.fullname\myfolder1 -Recurse -destination c:\mypath\folder destination
    }
    }

    something like that?
    • marco69's avatar
      marco69
      Copper Contributor
      Hi Harm_Veenstra!

      I have this situation:

      C:\mypath\20220421\myfolder1
      C:\mypath\20220422\myfolder1
      C:\mypath\20220425\myfolder1
      C:\mypath\20220511\myfolder1
      ....
      C:\mypath\20220718\myfolder1
      C:\mypath\20220723\myfolder1
      ...
      C:\mypath\20221212\myfolder1


      starting from the very first folder (the oldest, in the example above is the folder at 21Apr2022) I have to copy the content of myfolder1 to a destination directory, for example:

      c:\destpath\myfolder1

      Then:

      copy C:\mypath\20220421\myfolder1\* -> c:\destpath\myfolder1\*
      copy C:\mypath\20220422\myfolder1\* -> c:\destpath\myfolder1\*
      copy C:\mypath\20220425\myfolder1\* -> c:\destpath\myfolder1\*
      ...
      copy C:\mypath\20221212\myfolder1\* -> c:\destpath\myfolder1\*

      For info, just to better clarify, when copying I have to overwrite a file if it already exists and normally copy if it's new.

      mf
      • Just tested this script, this works:

        foreach ($folder in Get-ChildItem -Path c:\mypath -Directory | Sort-Object Name) {
            try {
                Test-Path "$($folder.fullname)\myfolder1" -ErrorAction Stop | Out-Null
                Copy-Item "$($folder.fullname)\myfolder1" -Recurse -Destination C:\destpath\myfolder1 -Force:$true -Confirm:$false -ErrorAction Stop
                Write-Host ("Processing {0}" -f $folder.fullname) -ForegroundColor Green
            }
            catch {
                Write-Warning ("Folder myfolder1 not found in {0} or not enough permissions" -f $folder.FullName)
            }
        }

         

        Source directory:


        Destination directory:

        It will check permissions and copy if it has permissions and will overwrite if the file is already present, it will show a warning if the folder1 folder was not found in a directory.

         

        You can test it for yourself with a test directory structure 🙂 

         

Resources