lupora
Goto Top

Mit Powershell Dateien umbenennen

Hallo zusammen,

ich habe schon jetzt einiges rumprobiert und leider nicht hinbekommen. Vielleicht könnt ihr mir weiterhelfen.

Ich benötige ein Powershell Script das folgendes tut:
Es soll eine Ordnerstruktur (inkl. Unterordner) durchsuchen und einen String im Dateinamen suchen und ersetzen. Den String definiere ich.
Im Prinzip sucht es alle Dateien die es finden kann. Und immer wenn der String X im Dateinamen auftritt, wird er ersetzt durch String Y.
Problem: Ich kann das Pattern des Dateinamens nicht vorhersagen und habe mich dann schwer getan mit regex.

Die Dateinamen sehen z.B. so aus:
2019_06_14_4010009419839_ABC43_sdf54_SDFSDF34_ProjektZZZ_SDFDSF1_DSFDSFDSF15_ImgNo11_SDFDS1658.jpg

In dem Fall soll das Script alle Dateinamen finden wo der String "ProjektZZZ" drin vorkommt und den String ersetzen durch z.B. "ProjektXXX".
Es handelt sich um zehntausende Dateien. Kann man das Script irgendwie performant machen?

Das habe ich bisher:
$c = ($_ | Get-Content)        

If ($c | Select-String -Pattern ‘ModuleY’) {

$c = $c -creplace ‘ProjektZZZ’,’ProjektXXX’       

[IO.File]::WriteAllText($_.FullName, ($c -join “`r`n”)) }

}

Es funktioniert aber nicht :/

Content-ID: 618579

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

emeriks
emeriks 03.11.2020 um 14:05:17 Uhr
Goto Top
Hi,
warum Get-Content, wenn Du nur den Namen der Datei behandeln willst?

Ungefähr so sollte es gehen:
Get-ChildItem -Path PFAD -Recurse | % {
  If($_.FullName.Contains(‘ProjektZZZ’)) {
    $NewName = $_.FullName.Replace(‘ProjektZZZ’, ’ProjektXXX’)
    $_ | Move-Item -Destination $NewName
  }
}

E.
146189
146189 03.11.2020 aktualisiert um 14:14:27 Uhr
Goto Top
ls 'D:\Ordner' -File -recurse | ?{$_.Basename -like '*ProjektZZZ*'} | ren -NewName {$_.Basename.replace('ProjektZZZ','ProjektXXX')} -verbose -Force  
Lupora
Lupora 03.11.2020 um 16:14:26 Uhr
Goto Top
Ich habe folgende Parameter eingefügt:

[STRING] $pfad= "C:\Users\Desktop\ordner"
[STRING] $suchstring = "ProjektX"
[STRING] $replacestring = "ProjektY"

ls $pfad -File -recurse | ?{$_.Basename -like '*$suchstring*'} | ren -NewName {$_.Basename.replace('$suchstring','$replacestring')} -verbose -Force


Aber es geht nicht. Wie muss ich die Parameter korrekt einfügen?
emeriks
emeriks 03.11.2020 um 16:50:47 Uhr
Goto Top
Was geht nicht?
Passiert nichts? Kommt ne Fehlermeldung?

Ohne ' müsste auch gehen.
$_.Basename.replace($suchstring,$replacestring)
146189
Lösung 146189 03.11.2020 aktualisiert um 17:07:54 Uhr
Goto Top
Aber es geht nicht. Wie muss ich die Parameter korrekt einfügen?
-like '*$suchstring*'
'$suchstring','$replacestring'
Variablen werden innerhalb von Hochkommas nicht aufgelöst, Powershell Grundlagen erste Stunde! Hochkommas weglassen die sind erstens falsch und zweitens überflüssig, sowohl im Like Vergleich im Where-Object als auch in der Replace-Function!

$pfad= "C:\Users\Desktop\ordner"  
$suchstring = "ProjektX"  
$replacestring = "ProjektY"  

ls $pfad -File -recurse | ?{$_.Basename -like "*$suchstring*"} | ren -NewName {$_.Basename.replace($suchstring,$replacestring)} -verbose -Force  
Lupora
Lupora 03.11.2020 um 17:07:51 Uhr
Goto Top
Danke!
emeriks
emeriks 04.11.2020 um 08:15:05 Uhr
Goto Top
Oooch, keine Ursache.