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!
Please also mark the comments that contributed to the solution of the article
Content-Key: 62010663079
Url: https://administrator.de/contentid/62010663079
Printed on: May 6, 2024 at 18:05 o'clock
7 Comments
Latest comment
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
}