PowerShell Dateiname Zahlen entfernen
Guten Abend zusammen,
ich hänge jetzt seit Stunden an einem vermeintlich sehr einfachen Code.
Es geht darum, dass ich die bestimmte Zahlen aus mehreren .csv Dateinamen entfernt haben möchte.
Die Dateinamen sind immer wie folgt:
user_flight_report-2023_12_26_16_19_26.csv
user_theory_report-2023_12_25_16_19_26.csv
Dabei möchte ich gerne einfach "user_flight_report" als Dateiname behalten.
Ich habe bereits mit dem beigefügten PowerShell Code gearbeitet, allerdings löscht dieses aktuell nur die letzten 20 Zeichen
und ist damit recht Fehleranfällig.
Könnte jemand den Code bitte so pimpen, dass es die Zahlen 0-9 sowie "-" und "_" entfernt?
Am Ende möchte ich in knapp 100 Unterordnern nur die beiden CSV Dateien "User_flight_report.csv" & "User_theory_report.csv" übrig haben.
Das Ganze muss auch für nachfolgende Dateien funktionieren. D.h. wenn ich in ein paar Monaten weitere .csv Dateien hinzufüge, möchte ich auch hier nur einmal die Shell ausführen und die "neuen" Dateien sind gekürzt.
Vielen Dank!
ich hänge jetzt seit Stunden an einem vermeintlich sehr einfachen Code.
Es geht darum, dass ich die bestimmte Zahlen aus mehreren .csv Dateinamen entfernt haben möchte.
Die Dateinamen sind immer wie folgt:
user_flight_report-2023_12_26_16_19_26.csv
user_theory_report-2023_12_25_16_19_26.csv
Dabei möchte ich gerne einfach "user_flight_report" als Dateiname behalten.
Ich habe bereits mit dem beigefügten PowerShell Code gearbeitet, allerdings löscht dieses aktuell nur die letzten 20 Zeichen
und ist damit recht Fehleranfällig.
$path = "C:\Users\XXX\Desktop\FDRZ"
Get-ChildItem -path $path -Recurse -filter *.csv |
ForEach-Object {
$filename = $_.Name
Write-host $filename
Rename-Item -path $_.FullName -newname ($_.Name.substring(0,$_.basename.length -
20)+ $_.Extension)
}
Könnte jemand den Code bitte so pimpen, dass es die Zahlen 0-9 sowie "-" und "_" entfernt?
Am Ende möchte ich in knapp 100 Unterordnern nur die beiden CSV Dateien "User_flight_report.csv" & "User_theory_report.csv" übrig haben.
Das Ganze muss auch für nachfolgende Dateien funktionieren. D.h. wenn ich in ein paar Monaten weitere .csv Dateien hinzufüge, möchte ich auch hier nur einmal die Shell ausführen und die "neuen" Dateien sind gekürzt.
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62010663079
Url: https://administrator.de/forum/powershell-dateiname-zahlen-entfernen-62010663079.html
Ausgedruckt am: 01.04.2025 um 13:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo,
Keine Gewähr.
Gruß
# Set the path to the specific folder
$folderPath = "C:\Path\To\Your\Folder"
# Get all CSV files recursively
$csvFiles = Get-ChildItem -Path $folderPath -Filter *.csv -Recurse
# Loop through each CSV file
foreach ($file in $csvFiles) {
# Get the file name without the timestamp
$newFileName = $file.BaseName -replace '-\d{4}_\d{2}_\d{2}_\d{2}_\d{2}_\d{2}', ''
# Construct the new file path
$newFilePath = Join-Path -Path $file.Directory.FullName -ChildPath "$newFileName.csv"
# Rename the file
Rename-Item -Path $file.FullName -NewName $newFilePath -Force
}
Keine Gewähr.
Gruß

Get-ChildItem -LiteralPath "C:\Users\XXX\Desktop\FDRZ" -Recurse -File -filter "*-*.csv" | rename-item -newname {$_.Basename.split('-')[0] + $_.Extension} -verbose

Hättest du noch eine clevere Idee, wie ich vor dem "user" noch den Ordernamen in dem sich diese Datei befindet, ergänzen kann?
Get-ChildItem -LiteralPath "C:\Users\XXX\Desktop\FDRZ" -Recurse -File -filter "*-*.csv" | rename-item -newname {$_.Directory.Name + "_" + $_.Basename.split('-')[0] + $_.Extension} -verbose
Hi,
um einzelne Zeichen in einem String zu entfernen verwendest du am besten ein REGEX-Character-Set [0-9-_].
so wird jedes einzelne Zeichen im String geprüft und es ist total egal wie oft es vorkommt und wo es sich befindet:
um einzelne Zeichen in einem String zu entfernen verwendest du am besten ein REGEX-Character-Set [0-9-_].
so wird jedes einzelne Zeichen im String geprüft und es ist total egal wie oft es vorkommt und wo es sich befindet:
$regexOption = [System.Text.RegularExpressions.RegexOptions]::IgnoreCase
$path = "C:\Users\XXX\Desktop\FDRZ"
Get-ChildItem -path $path -Recurse -filter "*.csv" |
ForEach-Object {
$new = $([Regex]::Replace($_.FullName, "([0-9-_])", "", $regexOption))
Write-Host "old Name: $($_.Name)"
Write-Host "new Name: $(($new -split '\\')[-1])"
Rename-Item -path $_.FullName -newname $new
}