Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 824
  • Last Modified:

Group unique filenames by expression?

I have a directory full of unique names, all in the same format - Scriptname_datecodestuff.txt
How can I group these based on 'scriptname' ?
What I need to accomplish is I only want to have 10 'versions' of a file in this directory, so if their are more than 10, I need to delete the oldest of that group

Example files in the dir

With those listtings, the 2 groups would be localhost with a count of 3, and otherhost with a count of 3.

I have something semi working, but its not elogant, and suffers some bad performance..
$Group =$File.Name.SubString(0,(($File.Name.Length)-20))
ElseIf (($Directory | Where {$_.Name -Match $Group} | %{$_.Name.SubString(0,(($_.Name.Length)-20))} | Group | %{$_.count}) -gt 10) {
		$Directory | Where {$_.Name -Match $Group} | Sort -Property LastWriteTime | Select -First 1 | Remove-Item

Open in new window

1 Solution
rwskasAuthor Commented:
Sorry, that attached code was taken out of the entire script to just show the pieces that are relevant, the 2 lines dont flow together.
$file is a gci object
$directory = gci c:\temp
Try this:

Get-ChildItem C:\temp | foreach-object {
    Add-Member -InputObject $_ -MemberType noteproperty -Name Groupname -Value $(if($_.name -match "^[^_]*"){$matches[0]}else{$null}) -PassThru} | ?{$_.groupname} |
        Group-Object -Property groupname | ?{$_.count -gt 10} | foreach-object {
            $_.group | Sort-Object -Property lastwritetime | Select-Object -First 1 | Remove-Item

Open in new window


Featured Post

Evaluating UTMs? Here's what you need to know!

Evaluating a UTM appliance and vendor can prove to be an overwhelming exercise.  How can you make sure that you're getting the security that your organization needs without breaking the bank? Check out our UTM Buyer's Guide for more information on what you should be looking for!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now