In Powershell you can use the pipe symbol “|” to chain certain commands together. This enables you to make powerful scripts. One example how you can use this is to recursively copy files from one location to another, but exclude certain files based on the filename or extension.
Example 1: copy all files from one folder to another with no exclusion (recursively)
The following example will simply copy all files from “D:\dir1” to “D:\dir2”. There is no exclusion filter applied here.
Get-ChildItem -Path D:\dir1 | Copy-Item -Destination D:\dir2 -Recurse -Container -Force -PassThru
Example 2: copy all files except files with a “.config” extension
The snippet below does the same as example #1, however now we added a check that only takes objects where the extension IS NOT equal to “.config”.
Get-ChildItem -Path D:\dir1 | Where-Object{$_.extension -notin ".config"} | Copy-Item -Destination D:\dir2 -Recurse -Container -Force -PassThru
In the “Where-Object{$.” part you can play around with different properties to check for such as filenames, file extensions etc. (Check the autocomplete in the Powershell editor).
Good luck!