SOLVED

Rename folders based on a column in a CSV file using PowerSehll

Copper Contributor

Hi Everyone, 

 

I'm a beginner to PowerShell. I have a scenario where I need to rename a large amount of folders (see below) in to a new name based on a column value in CSV. 

 

Current folders naming (unfortunately these folders already exists and I couldn't think of another way to achieve this other than PS)

VidRocksKay_0-1661954321836.png

 

My requirement is to rename all above folders to align the SamAccount value for each user in the CSV. 

 

UPNDisplayNameSamAccount
email address removed for privacy reasonsEllen CoreyEllen.Corey
email address removed for privacy reasons Aron MichellAron.Michell
email address removed for privacy reasonsSam ColinsSam.Colins

 

What would be the best way to do this using PowerShell? 

Appreciate your support on this !! Thank you so much 

4 Replies

@VidRocksKay 

as I can see, the folder name is UserName with no dot with a number

and the names in the CVS are usernames with a dot in the middle

are all the names following the same naming convention.?

 

@farismalaeb
Thanks for your response. Yes the naming convention is consistently the same. I basically want "FirstLast-123" to be renamed to "First.Last".
best response confirmed by VidRocksKay (Copper Contributor)
Solution

@VidRocksKay 

You can use this code to fix it

$csv=Import-Csv -Path C:\boot\Book3.csv
Foreach ($Name in $csv){
    try {
        $Filter=$Name.SamAccount.Replace('.','') +'*'
        Get-ChildItem -Directory -Path C:\boot -Filter $Filter | Rename-Item -NewName $name.SamAccount
    }
    catch {
        $_.Exception.Message
    }


}

replace the Path and you are good to go

@farismalaeb
This worked like charm! Thanks so much for your prompt response and support to the community !
Just to improve it a bit for everyone's benefit, could we add a line to handle duplicate ? (for instance, if the same name found in the folders, set "2 or 3" at the end).

like - JonDoe-123 , JonDoe-456
Renamed as JonDoe, JonDoe2

Again, thanks very much !

1 best response

Accepted Solutions
best response confirmed by VidRocksKay (Copper Contributor)
Solution

@VidRocksKay 

You can use this code to fix it

$csv=Import-Csv -Path C:\boot\Book3.csv
Foreach ($Name in $csv){
    try {
        $Filter=$Name.SamAccount.Replace('.','') +'*'
        Get-ChildItem -Directory -Path C:\boot -Filter $Filter | Rename-Item -NewName $name.SamAccount
    }
    catch {
        $_.Exception.Message
    }


}

replace the Path and you are good to go

View solution in original post