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.pdfTo
C:\TestEnv\
C:\TestEnv\Testfile1.txt
C:\TestEnv\Testfile2.tpdf
C:\TestEnv\Testfile3.txt
C:\TestEnv\Testfile4.pdfWhat 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.