Script i windows för att ta bort x antal tecken i filer i en katalog

Permalänk
Medlem

Script i windows för att ta bort x antal tecken i filer i en katalog

Håller på att fixa lite bland mina filer som jag har och försöker då snygga till filernas namn.

Exempelvis så har jag en hel del filer som har

"Titel.datum.klocka-1313515.audio.ts"

Siffrorna är random och det jag vill göra är att ta bort det som är mellan - och .

Så resultatet blir "Titel.datum.klocka.audio.ts"

Antingen köra i batch eller powershell men är lite osäker då siffrorna är random så jag kan inte köra en replace.

Permalänk

Är det några fler bindestreck någonstans i filnamnet? T.ex. mellan år, månad och dag i datumet.

Är det fler punkter i filnamnet än de fyra du har i exemplet? T.ex. mellan timmar, minuter och sekunder i klockslaget.

Permalänk
Medlem

Anger inte siffrorna på slutet antalet frames? Och bör inte den där audio.ts också ha en video.ts som bör matchas i filnamn? (gissar bara nu)

Permalänk
Medlem

Batch rename är inkluderat i PowerToys för Win10
https://docs.microsoft.com/en-us/windows/powertoys/powerrenam...

Permalänk
Medlem

Get-ChildItem "D:\Path\To\Files" -Filter *.ts | Foreach-Object { $directory = [System.IO.Path]::GetDirectoryName($_) $basename = [System.IO.Path]::GetFileName($_.Name) -replace '(.*)-\d+(.*)', '$1$2' $newname = [System.IO.Path]::Combine($directory, $basename) Rename-Item $_.FullName $newname }

Edit: Bara snabbtestat, stäm mig inte om det inte funkar.

Edit2: En variant utan .NET-referenser:

Get-ChildItem "D:\Temp\temp" -Filter *.ts | Foreach-Object { $directory = Split-Path -Path $_ $basename = (Split-Path -Path $_.Name -Leaf) -replace '(.*)-\d+(.*)', '$1$2' $newname = Join-Path -Path $directory -ChildPath $basename Rename-Item $_.FullName $newname }

Permalänk
Rekordmedlem

Jag brukar använda Aren https://www.advancedrenamer.com den har mycket bra funktioner på ett lätt sätt och räcker inte de går den också att scripta och böka runt med reguljära uttryck i.