I am new to powershell. I need to copy the whole folder structure from source to destination with filenames matching a pattern. I am doing the following. But it just copies the content in the root directory. For example
"E:\Workflow\mydirectory\file_3.30.xml"
does not get copied.
Here is my sequence of commands.
PS F:\Tools> $source="E:\Workflow"
PS F:\Tools> $destination="E:\3.30"
PS F:\Tools> $filter = [regex] "3.30.xml"
PS F:\Tools> $bin = Get-ChildItem -Path $source | Where-Object {$_.Name -match $filter}
PS F:\Tools> foreach ($item in $bin) {Copy-Item -Path $item.FullName -Destination $destination}
PS F:\Tools> foreach ($item in $bin) {Copy-Item -Path $item.FullName -Destination $destination -recurse}
You have a few problems. First of all, add -Recurse switch to Get-ChildItem so all files matching filter will be found no matter how deep. Then you need to recreate the original directory structure as you can't copy a file to a directory which doesn't exist. The -ea 0 switch on md will make sure errors are ignored when creating new dir - the following will do the trick:
$source="E:\Workflow"
$destination="E:\3.30"
$filter = [regex] "3.30.xml"
$bin = Get-ChildItem -Recurse -Path $source | Where-Object {$_.Name -match $filter}
foreach ($item in $bin) {
$newDir = $item.DirectoryName.replace($source,$destination)
md $newDir -ea 0
Copy-Item -Path $item.FullName -Destination $newDir
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With