# encoding: ascii
# api: powershell
# title: Copy-Item extended
# description: My replacement of Copy-Item addresses 3 problems. 1) if $dest doesn’t exist, it creates a directory 2) $exclude works on all levels  3) It handles wildcards in $src (in the filepart, this extends the solution to 2) in http://stackoverflow.com/questions/731752/exclude-list-in-powershell-copy-item-does-not-appear-to-be-working. Wildcards in the directory part of $dest are supported, but I do not recommend this use. This is a workaround for my personal needs, it does not try to use include. Note this solves the defect of Get-Childitem which doesn’t return the relative path and the object simultaneously in case of wildcards in $path.
# version: 0.1
# type: function
# author: Bernd Kriszio
# license: CC0
# function: Copy-ToCreateFolder
# x-poshcode-id: 3475
# x-archived: 2016-04-20T01:36:53
# x-published: 2013-06-24T10:57:00
#
#
function Copy-ToCreateFolder
{
    param(
        [string]$src,
        [string]$dest,
        $exclude,
        [switch]$Recurse
    )
    
    # The promlem with Copy-Item -Rec -Exclude is that -exclude effects only top-level files
    # Copy-Item $src $dest    -Exclude $exclude       -EA silentlycontinue -Recurse:$recurse
    # http://stackoverflow.com/questions/731752/exclude-list-in-powershell-copy-item-does-not-appear-to-be-working
    
    if (Test-Path($src))
    {
        # nonstandard: I create destination directories on the fly
        [void](New-Item $dest -itemtype directory -EA silentlycontinue )
        Get-ChildItem -Path $src -Force -exclude $exclude | % {
            
            if ($_.psIsContainer)
            {
                if ($Recurse) # non standard: I don't want to copy empty directories
                {
                    $sub = $_
                    $p = Split-path $sub
                    $currentfolder = Split-Path $sub -leaf
                    #Get-ChildItem $_ -rec -name  -exclude $exclude -Force | % {  "{0}    {1}" -f $p, "$currentfolder\$_" }
                    [void](New-item $dest\$currentfolder -type directory -ea silentlycontinue)
                    Get-ChildItem $_ -Recurse:$Recurse -name  -exclude $exclude -Force | % {  Copy-item $sub\$_ $dest\$currentfolder\$_ }
                }
            }
            else
            {
                
                #"{0}    {1}" -f (split-path $_.fullname), (split-path $_.fullname -leaf)
                Copy-Item $_ $dest
            }
        }
    }
}
