Search code examples
powershellcopy-item

Error While Copying files using Powershell


I simply want to copy some files from one Directory to another. The Problem is, that the files were indeed copied, but for every file I get an error saying, that I am not authorized to Access Destination Directory.The Destination Directory shown in the error is not a Directory but a filename, actually the Name of the file actually being copied

For Example:

"C:\Users\Administrator\Desktop\temp\FileExport\Sample\archive\Arc9wa\samplesys\data\UPR00000\0000003E.bmp"

How can I Prevent this Happening? What am I doing wrong?

My Copy-File Command:

Copy-Item "$File" -Destination "$Destination" -Recurse -force

Complete Code Looks like:

[string]$samplepath = Resolve-Path /*\config\serversetup2
    $first_letter= $samplepath.SubString(0,1)
    $dpath=$first_letter+":"
    $path = Get-Location
    Copy-Item '/*\config\serversetup2' -Destination $dpath'\temp\serversetup2\' -recurse -force
   
 $samplepath -match'(?<content>.*)config'
        $respath= $matches['content']
        $fileexport= "\FileExport"
        [String[]]$Destination = Join-Path -Path $path -ChildPath $fileexport
        [String[]]$Source = $respath
        [String[]]$FilePattern = "*"

    $Result = @()
        Write-Host "Copying '$($Source -join ", ")' to '$($Destination -join ", ")'..." -ForegroundColor Green
        $FileCount = (Get-ChildItem $Source -Recurse -File -Include $FilePattern -ErrorAction SilentlyContinue).Count
        $i = 0
        $NotFound = $true
        $Duration = Measure-Command {
            foreach ($File in (Get-ChildItem -Path $Source -Recurse -File -Include $FilePattern -ErrorAction SilentlyContinue)) {
                global:$i++
                Write-Progress -Activity "Copying '$($Source -join ", ")' to '$($Destination.FullName)'" -Status "Copied $i out of $FileCount..." -PercentComplete ($i/$FileCount*100)
                Write-Verbose "Copying '$($Source -join ", ")' to '$($Destination.FullName)'"
                foreach ($File in $Source) {
                Copy-Item "$File" -Destination "$Destination" -Recurse -force
                }
            }
        }
    Write-Host "Finished Export"

Solution

  • Instead of using Copy-Item I am using Robocopy. There were also many Bugs in my Code. Here is my new Code working fine:

    [string]$samplepath = Resolve-Path /*\temp
    $samplepath -match'(?<content>.*)temp'
    $respath= $matches['content']
    
    $first_letter= $samplepath.SubString(0,1)
    $dpath=$first_letter+":"
    $path = Get-Location
    $exppath = Join-Path -Path "$path\" -ChildPath "\FileExport"
    New-Item -Path "$dpath\Sample" -ItemType Directory -force
    $newpath = Join-Path -Path "$dpath" -ChildPath "Sample"
    Write-Host "Starting import"
    
     robocopy "$exppath" "$newpath" /e
    
    
    Write-Host "Process finished"