Dateierweiterung mit Powershell ändern
Ich arbeite unter dem Betriebsystem Windows 10 mit der Powershell-Version: 5.1.19041.906
Ich habe Dateien, die im Basenamen und in der Extension den String "_invalid" haben, z.B.:
hallo_invalid.cpp_invalid
aaa_invalid.h_invalid
blabla_invalid.txt_invalid
Meine Frage:
Gibt es eine Powershell-Kommando (wenn möglich Einzeiler) der mir nur in der Extension das "_invalid" entfernt.
Als Ergebnis sollte also rauskommen:
hallo_invalid.cpp
aaa_invalid.h
blabla_invalid.txt
Allgemein soll es so sein, dass von der Extension (egal welcher) nur der String "_invalid" entfernt wird, der Basename aber davon nicht betroffen wird.
Ich habe schon folgenden Code probiert:
Mit diesen Code wird leider auch im Basenamen der String "_invalid" mit entfernt.
Ich habe Dateien, die im Basenamen und in der Extension den String "_invalid" haben, z.B.:
hallo_invalid.cpp_invalid
aaa_invalid.h_invalid
blabla_invalid.txt_invalid
Meine Frage:
Gibt es eine Powershell-Kommando (wenn möglich Einzeiler) der mir nur in der Extension das "_invalid" entfernt.
Als Ergebnis sollte also rauskommen:
hallo_invalid.cpp
aaa_invalid.h
blabla_invalid.txt
Allgemein soll es so sein, dass von der Extension (egal welcher) nur der String "_invalid" entfernt wird, der Basename aber davon nicht betroffen wird.
Ich habe schon folgenden Code probiert:
gci "C:\Meine_Dateien\Test" -File -Rec | ? { $_.extension -match '_invalid' } | Rename-Item -NewName { $_.name -replace '_invalid', '' } -WhatIf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665839
Url: https://administrator.de/contentid/665839
Ausgedruckt am: 25.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar
Kleine Änderung im Regex große Wirkung 😜
Gruß w.
gci "C:\Meine_Dateien\Test" -File -Rec | ?{$_.extension -match '_invalid$'} | Rename-Item -NewName {$_.name -replace '_invalid$' }
Moin,
Das ist ja auch logisch, denn du schreibst ja, dass er dir im $_.name das _invaild ersetzen soll.
Du willst ja, dass er dir aber im $._extension den Begriff ersetzt.
Nach einer Lösung müsstest du einmal selbst gezielt schauen - dafür reichen meine ad hoc PS-KEnntnise noch nicht.
Lediglich einen Mehrzeiler habe ich auf die Schnelle finden können:
Quelle: https://stackoverflow.com/questions/52661728/powershell-bulk-replacing-a ...
Mit diesen Code wird leider auch im Basenamen der String "_invalid" mit entfernt.
Das ist ja auch logisch, denn du schreibst ja, dass er dir im $_.name das _invaild ersetzen soll.
Du willst ja, dass er dir aber im $._extension den Begriff ersetzt.
Nach einer Lösung müsstest du einmal selbst gezielt schauen - dafür reichen meine ad hoc PS-KEnntnise noch nicht.
Lediglich einen Mehrzeiler habe ich auf die Schnelle finden können:
$path = "D:\Code\PowerShell\StackOverflow"
$pattern = "*~*"
Get-ChildItem $path -Recurse -File | Where-Object {$_.Name -like $pattern} |
ForEach-Object {
$directory = $_.DirectoryName # or [System.IO.Path]::GetDirectoryName($_.FullName) or use Split-Path $_.FullName -Parent
$filename = $_.BaseName -replace '~+', '-' # or [System.IO.Path]::GetFileNameWithoutExtension($_.Name) -replace '~+', '-'
$extension = $_.Extension # or [System.IO.Path]::GetExtension($_.Name)
if (![string]::IsNullOrEmpty($extension)) { $filename += $extension.ToLower() }
$newname = Join-Path -Path $directory -ChildPath $filename
Rename-Item -LiteralPath $_.FullName -NewName $newName -Force
}
Quelle: https://stackoverflow.com/questions/52661728/powershell-bulk-replacing-a ...
Zitat von @GarfieldBonn:
Nöp dat tädet so ned .... Erstens müsste dort dann FullName statt Name stehen (ist übrigens überflüssig nur die Property über die Pipeline zu schicken) und zweitens würde bei Dateien bei denen eben nichts zu replacen ist ein Fehler geworfen werden weil eine Datei ja bekanntlich nicht mit dem gleichen Namen umbenannt werden kann 😉.(gci "C:\Temp\Test" -File -Rec).Name | Rename-Item -NewName { ($_).TrimEnd('_invalid')} -WhatIf