buliwyf
Goto Top

Nur Unterordner umbenennen?

Hallo Zusammen,

kann ich in powershelll nur Unterordner umbennen?
zb. Pfad: D:\test\Ordner_1233\Akte1_1233
D:\test\Ordner_1233\Akte2_1233

Ergebnis: D:\test\Ordner_1233\Akte1
D:\test\Ordner_1233\Akte2

Da es sich hier ab D:\test\ um einige hundert Ordner handelt wäre es per Hand mehr als anstrengend.
Das Einzige wo man anfassen kann wäre bei dem String "Akte1" und "Akte2".

Suche in den Unterordnern nach den Ordnern Akte1 und Akte2, rename...... ?

Wäre doch was für Siddius face-wink

Vielen Dank.

LG Stefan

Content-ID: 1520801138

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

Ausgedruckt am: 25.11.2024 um 00:11 Uhr

buliwyf
buliwyf 15.12.2023 um 14:15:06 Uhr
Goto Top
Okay, aus den früheren scripten habe ich folgendes genommen :

Get_ChildItem "D:\test" -Directory -Recurse -Filter "Akte 1* | rename-item -NewName "Akte 1"  

Funktioniert.
Allerdings mit dem Fehlercode: Quell und Ziefpfad dürfen nicht identisch sein.
Gibts für dieses kosmetische Problem eine Lösung?

Vielen Dank.
9697748851
9697748851 15.12.2023 aktualisiert um 14:50:42 Uhr
Goto Top
Wäre doch was für Siddius face-wink
lol.


Es scheint, dass der Fehler "Quell- und Ziel-Pfad dürfen nicht identisch sein" darauf hinweist, dass du versuchst, den Ordner in denselben Ordner umzubenennen, in dem er sich bereits befindet. Das kann in PowerShell zu einem Fehler führen.  

Hier ist eine korrigierte Version deines Befehls, um dies zu vermeiden:

Get-ChildItem "D:\test" -Directory -Recurse -Filter "Akte 1*" | ForEach-Object { Rename-Item $_.FullName -NewName "Akte 1" }  

Änderungen im Vergleich zu deinem ursprünglichen Befehl:

Verwendung von ForEach-Object um jeden gefundenen Ordner einzeln zu bearbeiten.
Der Rename-Item-Befehl verwendet $_ als Variable für das aktuelle Objekt (den gefundenen Ordner) und verwendet $_.FullName als Quellpfad.
Dieser Befehl sollte die Ordner mit dem Präfix "Akte 1" in "Akte 1" umbenennen, ohne dass der Fehler auftritt. Stelle sicher, dass du die Berechtigungen zum Umbenennen der Ordner hast und dass kein anderer Prozess auf die Ordner zugreift.  
10138557388
Lösung 10138557388 15.12.2023, aktualisiert am 16.12.2023 um 06:42:27 Uhr
Goto Top
Moin.
What the fuck 🤣
Get-ChildItem "D:\test\*\akte*_*" -Directory | rename-item -newname {$_.Name.split('_')[0]} -verbose  
https://tio.run/##fc1NCsIwEIbhvacYilAtpPWnN1AQN15AJKR2IKH5KcloEfXssS1dFn ...

All the best
pjumper
buliwyf
buliwyf 18.12.2023 um 11:30:00 Uhr
Goto Top
Moin Zusammen,

Beide Lösungen funktionieren perfekt. Danke dafür.

Ein Anderes Problem wäre wenn Der Ordner ein Präfix hat, und die Unterordner ebenfalls, teilweise.

Zb. "D:\[Test] Mustermann, Erich\[Test] Akte 1\NormalerOrdnername\Dateiname.pdf"

Wie bekomme ich das : "[Test] " weg?
Mit Substring(7) nimmt er ja mit recurse bei allen 7 Zeichen weg, was dann weiter unten bei den normalen Ordner und Dateinamen weniger schön ist.

Mit TrimStart hab ich es versucht, leider ohne Erfolg.
Dann dachte ich an Replace?

LG Stefan
9697748851
9697748851 18.12.2023 um 11:37:10 Uhr
Goto Top
Hi.

wenn [Test] statisch ist:

# Pfad zur Datei
$dateipfad = "D:\[Test] Mustermann, Erich\[Test] Akte 1\NormalerOrdnername\"  

# Neuer Dateiname ohne [Test]
$neuerDateiname = $dateipfad -replace '\[Test\]', ''  

# Umbenennen der Datei
Rename-Item -Path $dateipfad -NewName $neuerDateiname -Force

Mach aber vorher Backups deiner Files, bevor Du testest.

Gruß
10138557388
Lösung 10138557388 18.12.2023 aktualisiert um 11:43:46 Uhr
Goto Top
Get-ChildItem "D:\" -Directory -Recurse | ?{$_.Name -like '*[Test]*'} | sort {$_.FullName.length} -Descending | rename-item -newname {$_.Name -replace '\[Test\]\s*'} -verbose    
Mach aber vorher Backups deiner Files, bevor Du testest.
Dafür gibt es den Parameter -whatif, damit lässt es sich auch gefahrlos testen 😉.
9697748851
9697748851 18.12.2023 um 11:43:53 Uhr
Goto Top
Dafür gibt es den Parameter -whatif, damitblässt sich gefahrlos testen.
Vergessen, Danke.
buliwyf
buliwyf 18.12.2023 um 11:56:04 Uhr
Goto Top
Wo käme hier ForEach-Object hin? Sonst funktioniert es tadelos face-smile
9697748851
9697748851 18.12.2023 um 11:58:03 Uhr
Goto Top
Wo käme hier ForEach-Object hin? Sonst funktioniert es tadelos face-smile
Versuch Dich etwas daran. So lernst Du auch aktiv dazu. face-smile
buliwyf
buliwyf 18.12.2023 um 12:00:27 Uhr
Goto Top
Ich versuch's schon face-wink
9697748851
9697748851 18.12.2023 um 12:07:37 Uhr
Goto Top
Ich versuch's schon face-wink
Try harder or ask ChatGPT :D
buliwyf
buliwyf 18.12.2023 um 12:12:50 Uhr
Goto Top
Hätte gedacht direkt vor der Anweisung?

Get-ChildItem "D:\" -Directory -Recurse | ?{$_.Name -like '*[Test]*'} | sort {$_.FullName.length} -Descending | ForEach-Object rename-item -newname {$_.Name -replace '\[Test\]\s*'} -verbose

Gibt aber nur Fehlermeldung lol
10138557388
10138557388 18.12.2023 aktualisiert um 12:17:12 Uhr
Goto Top
Foreach ist hier überflüssig! Works out of the box mit allen Ordnern die [Test] enthalten ...

RTFM ...!
buliwyf
buliwyf 18.12.2023 um 12:21:33 Uhr
Goto Top
Okay, dann wieder mal Großes Dankeschön für die schnelle Lösung.

Würde ich gerne lernen, fehlt nur Jemand den man ab und an fragen kann und Hauptsächlich "Zeit".
Aber ich gebe mir Mühe und lerne dazu face-smile

Vielen Dank.