darkzonesd
Goto Top

Unterordner Leerzeichen durch Unterstrich ersetzen

Guten Morgen zusammen,

ich möchte gerade in einem Verzeichnis unter Windows, die Namen von allen Ordnern ändern indem ich die Leerzeichen mit Unterstrichen ersetze, mein Skript funktioniert aber nicht face-sad

Kann mir jemand diesbezüglich helfen?

$Files = Get-ChildItem -Path "C:\Users\...\Desktop\testLeer"  
Copy-Item $Files.FullName -Destination C:\Users\...\Desktop\test
Set-Location -Path C:\Users\...\Desktop\test
Get-ChildItem -File | %{Rename-Item -NewName ( $_.Name -replace ' ','_' )}  

Vielen Dank!

Content-ID: 5500710084

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

Ausgedruckt am: 23.11.2024 um 13:11 Uhr

3063370895
Lösung 3063370895 20.01.2023 aktualisiert um 08:46:02 Uhr
Goto Top
Moin,

Du möchtest alle Unterordner eines Verzeichnisses umbenennen? oder Dateien? oder beides?

Alle Unterordner in dem Ordner umbenennen:

$folder = "C:\users\xxx\Desktop\testLeer"  
Get-ChildItem -Path $folder -Directory | %{Rename-Item -Path $_.FullName -NewName ( $_.Name -replace ' ','_' )}  

Alle Unterordner UND deren Unterordner umbenennen:

$folder = "C:\users\xxx\Desktop\testLeer"  
Get-ChildItem -Path $folder -Directory -Recurse | %{Rename-Item -Path $_.FullName -NewName ( $_.Name -replace ' ','_' )}  

Alle Dateien in dem Ordner umbenennen:

$folder = "C:\users\xxx\Desktop\testLeer"  
Get-ChildItem -Path $folder -File | %{Rename-Item -Path $_.FullName -NewName ( $_.Name -replace ' ','_' )}  

Alle Dateien im Ordner UND Unterordner umbenennen:

$folder = "C:\users\xxx\Desktop\testLeer"  
Get-ChildItem -Path $folder -File -Recurse | %{Rename-Item -Path $_.FullName -NewName ( $_.Name -replace ' ','_' )}  

Alle Dateien UND Ordner im Ordner umbenennen:

$folder = "C:\users\xxx\Desktop\testLeer"  
Get-ChildItem -Path $folder | %{Rename-Item -Path $_.FullName -NewName ( $_.Name -replace ' ','_' )}  

Alle Dateien UND Ordner im Ordner UND Unterordner umbenennen:

$folder = "C:\users\xxx\Desktop\testLeer"  
Get-ChildItem -Path $folder -Recurse | %{Rename-Item -Path $_.FullName -NewName ( $_.Name -replace ' ','_' )}  
DarkZoneSD
DarkZoneSD 20.01.2023 um 09:03:55 Uhr
Goto Top
Super, hat funktioniert danke!

"Nur" all Unterordner neu benennen ;)
5175293307
Lösung 5175293307 20.01.2023 aktualisiert um 10:02:41 Uhr
Goto Top
Nur zur Info, die Varianten mit Unterordnern und Dateien werden dann fehlschlagen wenn einer der Oberordner und dann auch eine Datei oder ein Unterordner in diesem Ordner wegen Leerzeichen umbenannt wird. Der Grund, durch die Reihenfolge der Sortierung ändert sich schon der Pfad was dann zum Fehler führt weil der Ordner oberhalb ja inzwischen anders heißt.
Man sollte also zumindest noch eine umgekehrte Sortierung (sort-object) nach der Gesamtpfadlänge/Level vor dem Umbenennen dazwischen schalten.

Etwa so
$folder = "C:\users\xxx\Desktop\testLeer"  
Get-ChildItem -Path $folder -Directory -Recurse | ? Name -match '\s+' | sort {$_.Fullname.length} -Descending | Rename-Item -NewName {$_.Name -replace '\s+','_'}  

Gruß Wurstel
ninnuzz
ninnuzz 11.09.2024 um 09:10:53 Uhr
Goto Top
Hallo zusammen

ist die Zeile 1 auch notwendig einzugeben?

Ich brauche diesen String damit alle Dateien im Ordner UND deren Unterordner umbenennt werden:

$folder = "C:\users\xxx\Desktop\testLeer"
Get-ChildItem -Path $folder -File -Recurse | %{Rename-Item -Path $_.FullName -NewName ( $_.Name -replace ' ','_' )}

leider kommt mir eine Fehlermeldung. Sorry für meine blöde Frage, ich bin leider kein Powershell-Spezialist.

Danke und Grüsse
DarkZoneSD
DarkZoneSD 11.09.2024 um 09:17:50 Uhr
Goto Top
Hallo ninnuzz,

welche Zeile 1 meinst Du denn? Wenn es die hier ist: "$folder = "C:\users\xxx\Desktop\testLeer"" Dann ja, allerdings trägst Du hier den Pfad ein zu dem Ordner an dem Du die Unterordner umbenennen möchtest face-smile

Viele Grüße
ninnuzz
ninnuzz 11.09.2024 um 09:32:03 Uhr
Goto Top
Hallo DarkZoneSD

Vielen Dank für die rasche Antwort. Leider erscheinen Fehlermeldung (siehe Bild).
Aber es könnte sein, weil ich eventuell die Dateinamen geändert habe, respektive ich habe den String für das ersetzen von "underline" durch "leerzeichen". Kann das sein?

LG
fehlermeldung_ps
DarkZoneSD
DarkZoneSD 11.09.2024 um 09:48:50 Uhr
Goto Top
Wie in dem oberen Kommentar beschrieben, liegt es vermutzlich daran, dass sobald sich der Ordnername ändert, auch der Zielpfad der anderen Ordner geändert wird. Sprich das Skript legt sich selber Steine in den Weg,

versuch es mal mit dem falls Du alle Dateien und Ordner umbenennen möchtest:

$folder = "C:\users\xxx\Desktop\testLeer"    
Get-ChildItem -Path $folder -Directory -Recurse | ? Name -match '\s+' | sort {$_.Fullname.length} -Descending | Rename-Item -NewName {$_.Name -replace '\s+','_'}    

Grüße
ninnuzz
ninnuzz 11.09.2024 um 10:01:51 Uhr
Goto Top
Yeah!! So wie ich es stichprobeartig getestet habe, scheint es funktioniert zu haben.

Ich habe es zuerst es "sortieren" lassen und dann den String mit dem Umbenennen durchlaufen lassen. Fehlermeldung erscheint immer noch, aber das wird daran liegen, dass sich die Pfade ändern respektive die Ordner-Namen.

Ein grosses Dankeschön!
DarkZoneSD
DarkZoneSD 11.09.2024 um 10:43:30 Uhr
Goto Top
Sehr gerne face-smile

Viele Grüße