Home > Software design >  Using PowerShell only copy folders (and contents within) that don't contain a string
Using PowerShell only copy folders (and contents within) that don't contain a string

Time:12-23

I have a long list of folders. Most of the folders follow the "name_#name" format. I have some that don't follow that structure. I want to move all the folders (and the sub-folders/files within) that DON'T have "_" in the folder name.

For example: test_#12352 moose_#4532 horse_#84462 cow24 fish3

Moved: cow24 fish3

I think Move files when they contain a specific word? could be modified to make it work...just not sure how. I'm used to just using GUI, this is my first time using PowerShell

When I tried using that code in that link it didn't work with my situation

CodePudding user response:

What you want to do is just filter the list before you move any files

So you can use the following to pick up all the files you want

$Files = Get-childItem -Path $Path -File

You can then filter it down. My favourite way is to pipe the variable into Where-Object and play around with the individual properties and match types. Since you don't want to include the _ we can use a -notmatch "_" to exclude those values

$Files = Get-ChildItem -Path $Path -File | Where-object{$_.Name -notmatch "_"}

And finally, you can move the files

$Files | move-item -path $_.FullName -Destination $Destination

Or as a one liner

Get-ChildItem -Path $Path -File | Where-object{$_.Name -notmatch "_"} | move-item -path $_.FullName -Destination $Destination

*Please note I haven't really tested this code. So test it out yourself before you run it

  • Related