kreuzberger
Goto Top

PowerShell oder Batch - Rename Ordner

Tach ihr Digitalfreunde,

ok, man könnte mich dreist oder faul nennen. Aber mir kommt einfach keine Idee wie ich es lösen könnte.

Ich will Ordner umbenennen, die sich Listenweise in Unterordnern befinden.

Die Ordner lauten:

„Name - Vorname - (Jahreszahl)“

Die Jahreszahl ist immer 4 Stellen und in Klammern.

Davon befinden sich (unterschiedlich) viele in einem Unterordner.

Dabei sollte nach dem Umbenennen herauskommen:

„NAME - Jahreszahl - Vorname“

Wenn ich das dann umbenannt habe kann ich daraus mit vorhandenen PS-Scripten weiterarbeiten.
also AD-User anlegen etc..............


Hat da Jemand zufällig eine Idee oder eine Lösung?

Danke im Voraus


Kreuzberger

Content-Key: 2079808457

Url: https://administrator.de/contentid/2079808457

Printed on: February 29, 2024 at 08:02 o'clock

Mitglied: 1915348599
1915348599 Mar 06, 2022, updated at Mar 07, 2022 at 05:52:20 (UTC)
Goto Top
Rename Ordner
Ich will Ordner umbenennen
Entscheide dich mal ­čść

Get-Childitem "d:\root" -Directory -Recurse | ?{$_.Name -match '([^-]+) - ([^-]+) - \((\d{4})\)'} | rename-item -newname {"$($matches[1].toUpper()) - $($matches[3]) - $($matches[2])"} -verbose  
https://tio.run/##XYw9i8JAEIZ7f8UQAu4iE/wsrCwUtPEKwcpE2UsGEswmYXbVk5jfHj ...
Member: kreuzberger
Solution kreuzberger Mar 08, 2022 at 11:09:08 (UTC)
Goto Top
soooooo, also nun komme ich mal weiter zum Antworten.

Herzlichen Dank an Petty, leider hatte das warum auch immer erst mal nicht geklappt.
eine nicht ganz perfekte Lösung hab ich aber mir dann doch zusammengefrickelt. Nicht schön, nicht perfekt, aber soweit geht es erst mal:

$ARBEITSPFAD = Read-Host -Prompt "Bitte geben Sie Ihren Pfad mit Copy & Paste ein!"  
$ARBEITSPFAD


$Ordnerliste = Get-ChildItem -Directory -Path $ARBEITSPFAD | select Name
write-host ""  
write-host ""  
write-host ""  
write-host ""  
write-host $Ordnerliste

foreach($u in $Ordnerliste) {

write-host "ALT->     ",$u.name  
 
# JAHR
$JAHR = $u.name.Substring($u.name.IndexOf("("),$u.name.Length-$u.name.IndexOf("("))   
$JAHR = $JAHR.Substring(1,4)
write-host "JAHR->    ",$JAHR  

# NAME 
$NAME = ($u.name).Substring(0,$u.name.IndexOf(" - "))  
write-host "NAME->    ",$NAME  

# VORNAME
$VORNAME = ($u.name).Substring(0,$u.name.IndexOf(" ("))  
$VORNAME = $VORNAME.Replace($NAME,"")  
$VORNAME = $VORNAME.Replace(" - ","")  
write-host "VORNAME-> ",$VORNAME  

$OrdnerNEU = $NAME + " - " + $JAHR + " - " + $VORNAME  
write-host "OrdnerNEU-> ",$OrdnerNEU   

# RENAME
$ARBEITSPFAD_NEU = $ARBEITSPFAD + "\" + $u.name  
Rename-Item -Literalpath $ARBEITSPFAD_NEU -NewName $OrdnerNEU
          
}

Danke

Kreuzberger
Mitglied: 1915348599
1915348599 Mar 08, 2022 at 11:11:58 (UTC)
Goto Top
leider hatte das warum auch immer erst mal nicht geklappt.
Das es geht siehst du ja in der Online-Demo , ansonsten hast du uns in der Formatierung der Namen etwas verschwiegen.
Member: kreuzberger
kreuzberger Mar 08, 2022 at 11:18:17 (UTC)
Goto Top
Hi Petty,
ich schliesse nicht aus, dass ich mich bei deinem Code dusslich angestellt hatte.

In den Vorhandenen Ordnern (Ausgangssituation) gibt es durchaus einige Abweichungen, die ich aber nicht extra abfangen wollte, denn das führt zu weit.
face-wink
Danke
Kreuzberger