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-Key: 1520801138

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

Printed on: April 27, 2024 at 09:04 o'clock

Member: buliwyf
buliwyf Dec 15, 2023 at 13:15:06 (UTC)
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.
Member: accessViolation
accessViolation Dec 15, 2023 updated at 13:50:42 (UTC)
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.  
Mitglied: 10138557388
Solution 10138557388 Dec 15, 2023, updated at Dec 16, 2023 at 05:42:27 (UTC)
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
Member: buliwyf
buliwyf Dec 18, 2023 at 10:30:00 (UTC)
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
Member: accessViolation
accessViolation Dec 18, 2023 at 10:37:10 (UTC)
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ß
Mitglied: 10138557388
Solution 10138557388 Dec 18, 2023 updated at 10:43:46 (UTC)
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 😉.
Member: accessViolation
accessViolation Dec 18, 2023 at 10:43:53 (UTC)
Goto Top
Dafür gibt es den Parameter -whatif, damitblässt sich gefahrlos testen.
Vergessen, Danke.
Member: buliwyf
buliwyf Dec 18, 2023 at 10:56:04 (UTC)
Goto Top
Wo käme hier ForEach-Object hin? Sonst funktioniert es tadelos face-smile
Member: accessViolation
accessViolation Dec 18, 2023 at 10:58:03 (UTC)
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
Member: buliwyf
buliwyf Dec 18, 2023 at 11:00:27 (UTC)
Goto Top
Ich versuch's schon face-wink
Member: accessViolation
accessViolation Dec 18, 2023 at 11:07:37 (UTC)
Goto Top
Ich versuch's schon face-wink
Try harder or ask ChatGPT :D
Member: buliwyf
buliwyf Dec 18, 2023 at 11:12:50 (UTC)
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
Mitglied: 10138557388
10138557388 Dec 18, 2023 updated at 11:17:12 (UTC)
Goto Top
Foreach ist hier überflüssig! Works out of the box mit allen Ordnern die [Test] enthalten ...

RTFM ...!
Member: buliwyf
buliwyf Dec 18, 2023 at 11:21:33 (UTC)
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.