Obecnie mam problemy w nazwie nazwy nazwy plików z PowerShell. Właściwie mogę zmienić nazwę plików w określonym folderze, jednak jeśli struktura jest inna, polecenie nie powiedzie się.

Przykładowe pliki:

test file - 1234 - copy.docx
test file - 1234.pdf

Prowadziłem następujące polecenie:

Get-ChildItem <location> -file | foreach {
Rename-Item -Path $_.FullName -NewName ($_.Name.Split("-")[0] + $_.Extension) }

Chcę zachować nazwę pliku przed ostatnim "-". Ale jeśli uruchomię moje polecenie, zawsze dostaję nazwę pliku przed pierwszym "-".

Wszelkie porady na lepsze podejście?

2
Nick 26 luty 2019, 11:10

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć RegEx, aby uzyskać pożądane wyjście:

Rename-Item -Path $_.FullName -NewName (($_.Name -replace '(.*)-.*?$','$1') + $_.Extension) }

(.*)-.*?$ Wybiera wszystkie znaki (chciwy) do ostatniego - przed końcem linii.

-1
TobyU 26 luty 2019, 08:43

Najbardziej proste podejście:

Get-ChildItem <location> -File | Rename-Item -NewName {
    $index = $_.BaseName.LastIndexOf("-")
    if ($index -ge 0) {
        $_.BaseName.Substring(0, $index).Trim() + $_.Extension
    }
    else { $_.Name }
}

Regex Wymień:

Get-ChildItem <location> -File |
  Rename-Item -NewName {($_.BaseName -replace '(.*)-.*', '$1').Trim() + $_.Extension}
2
mklement0 6 marzec 2019, 23:42