Carsten I
Carsten I

Reputation: 43

Get ChildItem from only files of specific folders

I try to export files of specific named Folders:

Get-ChildItem -Path 'C:\Test' -Name -Recurse -File > C:\Test\Test.txt

I get a list like:

content.csv
Test.txt
Folder 1\INTERESTED_FOLDER\a - Kopie.txt
Folder 1\INTERESTED_FOLDER\a.txt
Folder 1\Neuer Ordner\ttt.txt
Folder 1\Neuer Ordner - Kopie\ttt.txt
Folder 2\INTERESTED_FOLDER\b - Kopie.txt
Folder 2\INTERESTED_FOLDER\b.txt
Folder 2\Neuer Ordner\ttt.txt
Folder 2\Neuer Ordner - Kopie\ttt.txt

But what i want is:

Folder 1\INTERESTED_FOLDER\a - Kopie.txt
Folder 1\INTERESTED_FOLDER\a.txt
Folder 2\INTERESTED_FOLDER\b - Kopie.txt
Folder 2\INTERESTED_FOLDER\b.txt

I tried with -Filter "INTERESTED" etc. but then i only get

C:\Test\Folder 1\INTERESTED_FOLDER
C:\Test\Folder 2\INTERESTED_FOLDER

What i do wrong?

Upvotes: 1

Views: 4149

Answers (3)

Theo
Theo

Reputation: 61028

If I read your question correctly, you want the FullNames of the files (so their names including the path).

If that is the case, remove the -Name switch and filter on the DirectoryName property like:

(Get-ChildItem -Path 'C:\Test' -Recurse -File |
Where-Object { $_.DirectoryName -match 'INTERESTED_FOLDER' }).FullName |  # also matches 'MY_INTERESTED_FOLDER_123'
Set-Content -Path 'C:\Test\Test.txt'

Alternatives for the Where-Object clause:

# also matches 'MY_INTERESTED_FOLDER_123'
Where-Object { $_.DirectoryName -like '*INTERESTED_FOLDER*' }

or if you are looking for a precise match on the complete folder name

# does NOT match 'MY_INTERESTED_FOLDER_123'
Where-Object { $_.DirectoryName -split '[/\\]' -contains 'INTERESTED_FOLDER' }

Upvotes: 1

AdminOfThings
AdminOfThings

Reputation: 25001

Using the -Name parameter affects your capabilities because you are returning strings instead of FileInfoObjects. You may then use Where-Object to capture everything.

Get-ChildItem -Path 'C:\Test' -Name -Recurse -File | 
    Where {$_ -match '\\INTERESTED_FOLDER\\'} |
        Set-Content c:\test\test.txt

Note that the matching above assumes INTERESTED_FOLDER is not a direct descendent of your path. If that is a possibility, then your match expression needs to be updated to \\?INTERESTED_FOLDER\\.

Upvotes: 0

Santiago Squarzon
Santiago Squarzon

Reputation: 59820

You can perform a wildcard search using the -Filter parameter:

Get-ChildItem -Path 'C:\Test' -Name -Recurse -File -Filter *INTERESTED_FOLDER* > C:\Test\Test.txt

If for example, you were interested in finding the files in INTERESTED_FOLDER but also only the files that are .txt you could do:

-Filter *INTERESTED_FOLDER*.txt

Upvotes: 0

Related Questions