Objective: Copy all subfolder contents in C:\TestEnv to itself.
From
C:\TestEnv\Folder1\* C:\TestEnv\Folder1\Testfile1.txt C:\TestEnv\Folder1\Testfile2.tpdf C:\TestEnv\Folder2\* C:\TestEnv\Folder2\Testfile3.txt C:\TestEnv\Folder2\Testfile4.pdf To
C:\TestEnv\ C:\TestEnv\Testfile1.txt C:\TestEnv\Testfile2.tpdf C:\TestEnv\Testfile3.txt C:\TestEnv\Testfile4.pdf What I have so far...
$Exclude = 'C:\TestEnv\Scripts','C:\TestEnv\TestFiles' Copy-Item -Exclude $Exclude -Path "C:\TestEnv\*\*" -Destination "C:\TestEnv" -Recurse
1 Answer
Since, -Exclude doesn't get arrays, Try this:
$Exclude = 'C:\TestEnv\Scripts','C:\TestEnv\TestFiles' Get-ChildItem -Path "C:\TestEnv\*" -directory | where {$_.fullname -notin $Exclude} | Get-ChildItem -Recurse -File | Foreach { Copy-Item -LiteralPath $_.Fullname -Destination "C:\TestEnv\" -force } Here:
- Define Exclusion array as
$Exclude. - Filter directories from source using
Get-ChildItemand-Directoryswitch. - Filter the exclusion directories with
where. - Again list only files with
-Fileand recursive with-Recurse. - Then
Copy-Itemforcefully (-Forceomittable) in aForeachloop piped the files.