In this new post, I will give you a script to copy folders excluding files in PowerShell. First, I want to explain the scenario I’m facing.
Scenario
So, I have some Microsoft Windows Servers on premise and on IIS I have configured applications for developer and production environments. Because the servers are in the company environment and they are not exposed to the internet, I can’t use CD/CI with Azure DevOps, for example. I have to do the deployment manually.
So, in the file system, I have one folder for each project and that contains:
- one folder for the developer environment
- another one for QA and Testers
- another one for production

When the application in the development environment is ready, I want to copy all the files from the developer
folder to the tester
folder but I want to exclude some files or directory such as:
appsettings
for each environmentweb.config
- the folder for imports under
wwwroot\Uploads\Imports
In each folder, I want to have the specific appsettings.json
and web.config
for the environment and I don’t want to change.
Then, because copying files and folders manually can cause issues, I’m looking for a script in PowerShell for that.
The script
$binSolutionFolder = 'C:\Projects\Portal\Dev\' $deployFolderDir = 'C:\Projects\Portal\Test\' $excludeFiles = @('appsettings.json', 'appsettings.Development.json', 'appsettings.Release.json', 'web.config') $excludeFolders = @('wwwroot\\Uploads\\Imports') $excludeFoldersRegex = $excludeFolders -join '|' Get-ChildItem -Path $binSolutionFolder -Recurse -Exclude $excludeFiles | where { $_.FullName.Replace($binSolutionFolder, "") -notmatch $excludeFoldersRegex } | Copy-Item -Destination { if ($_.PSIsContainer) { Join-Path $deployFolderDir $_.Parent.FullName.Substring($binSolutionFolder.length -1) } else { Join-Path $deployFolderDir $_.FullName.Substring($binSolutionFolder.length -1) } } -Force
Conclusion
So, this is the end of how to copy folders excluding files in PowerShell that you can use it for deployment, for example.