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:
Es funktioniert aber nicht :/
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 :/
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 618579
Url: https://administrator.de/contentid/618579
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
7 Kommentare
Neuester Kommentar
ls 'D:\Ordner' -File -recurse | ?{$_.Basename -like '*ProjektZZZ*'} | ren -NewName {$_.Basename.replace('ProjektZZZ','ProjektXXX')} -verbose -Force
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!-like '*$suchstring*'
'$suchstring','$replacestring'
$pfad= "C:\Users\Desktop\ordner"
$suchstring = "ProjektX"
$replacestring = "ProjektY"
ls $pfad -File -recurse | ?{$_.Basename -like "*$suchstring*"} | ren -NewName {$_.Basename.replace($suchstring,$replacestring)} -verbose -Force