PowerShell - Copy specific files from specific folders

John Enxada picture John Enxada · Mar 17, 2015 · Viewed 21.1k times · Source

So, the folder structure looks like this:

  1. SourceFolder
    • file1.txt
    • file1.doc
      1. Subfolder1
        • file2.txt
        • file2.doc
          1. SubSubFolder
            • file3.txt
            • doc3.txt

What I want to do is copy all .txt files from folders, whose (folder) names contains the eng, to a destination folder. Just all the files inside the folder - not the file structure.

What I used is this:

$dest = "C:\Users\username\Desktop\Final"
$source = "C:\Users\username\Desktop\Test1"
Copy-Item $source\eng*\*.txt $dest -Recurse

The problem is that it copies the .txt files only from each parent folder but not the sub-folders.

How can I include all the sub-folders in this script and keep the eng name check as well? Can you please help me?

I am talking about PowerShell commands. Should I use robocopy instead?

Answer

beatcracker picture beatcracker · Mar 17, 2015

Yet another PowerShell solution :)

# Setup variables
$Dst = 'C:\Users\username\Desktop\Final'
$Src = 'C:\Users\username\Desktop\Test1'
$FolderName = 'eng*'
$FileType = '*.txt'

# Get list of 'eng*' file objects
Get-ChildItem -Path $Src -Filter $FolderName -Recurse -Force |
    # Those 'eng*' file objects should be folders
    Where-Object {$_.PSIsContainer} |
        # For each 'eng*' folder
        ForEach-Object {
        # Copy all '*.txt' files in it to the destination folder
            Copy-Item -Path (Join-Path -Path $_.FullName -ChildPath '\*') -Filter $FileType -Destination $Dst -Force
        }