Copy file with containing date time

hernandy 1 Reputation point
2021-11-03T05:38:42.457+00:00

Hi All,

I have some script to copy the file on the directory with filename containing date (MMddyyy).asc , let's say the file as follows :

  • 11022021.asc
  • 11032021.asc
  • 11042021.asc

And i need to copy those files to :

  • 04022022.asc
  • 04032022.asc
  • 04042022.asc

I create the array with the command Get-ChilItem but the copy-item only copied the first file 11022021.asc and the scripts is:

$filename = Get-ChildItem '/home' | where{ $_.Extension -like "*.asc" }
foreach ($a in $filename) {
Write-Host "Copy $a"
Copy-Item -Force "$a" ("/home/{0:MMddyyyy}.asc" -f ((get-date).AddMonths(5)))
}

Windows Server PowerShell
Windows Server PowerShell
Windows Server: A family of Microsoft server operating systems that support enterprise-level management, data storage, applications, and communications.PowerShell: A family of Microsoft task automation and configuration management frameworks consisting of a command-line shell and associated scripting language.
5,383 questions
0 comments No comments
{count} votes

2 answers

Sort by: Most helpful
  1. DaveK 1,846 Reputation points
    2021-12-05T18:40:02.697+00:00
    Get-ChildItem '/home' -Filter *.asc |
        foreach {Copy-Item -Force -Path $_.FullName -Destination ("/home/" + [datetime]::parseexact($_.BaseName, 'MMddyyyy', $null).AddMonths(5).ToString('MMddyyyy') + $_.Extension)}
    

    I got this to work outputting the new files but with the filename date incremented by 5 months.

    2 people found this answer helpful.

  2. Rich Matheisen 45,096 Reputation points
    2021-12-05T20:33:49.137+00:00

    I'd expand a bit on @DaveK proposal (I'd vote for it, too -- but it's been posted as a comment and not as an answer):

    Get-ChildItem '/home' -Filter *.asc |  
        ForEach-Object {  
            $f = $_.FullName        # save in case of exception  
            Try{  
                $d = [datetime]::parseexact($_.BaseName, 'MMddyyyy', $null).AddMonths(5).ToString('MMddyyyy')  
                $s = "{0}{1}.{2}" -f '/home/', $d, $_.Extension  
                Copy-Item -Path $_.FullName -Destination $s -ErrorAction STOP  
            }  
            Catch{  
                "Failed to copy file '$f' to '$s' :`r`n$_"  
            }  
        }  
    
    2 people found this answer helpful.
    0 comments No comments