Muszę wypakować nazwę pliku i rozszerzenie z np. My.file.xlsx. Nie znam nazwy pliku lub rozszerzenia i może być więcej kropek w nazwie, więc muszę przeszukać ciąg z prawej strony, a kiedy znajdę pierwszą kropkę (lub ostatnią od lewej), wyodrębnij część na prawą stronę i część po lewej stronie od tej kropki.
Może jest lepsze rozwiązanie, ale nie znalazłem nic tutaj ani nigdzie indziej. Dziękuję Ci
.net
powershell
powershell-2.0
kulter
źródło
źródło
Odpowiedzi:
Jeśli plik schodzi z dysku i jak powiedzieli inni, użyj właściwości
BaseName
iExtension
:Jeśli otrzymałeś nazwę pliku jako część ciągu (powiedzmy pochodzącego z pliku tekstowego), użyłbym metod statycznych
GetFileNameWithoutExtension
iGetExtension
z klasy System.IO.Path :źródło
[System.IO.Path] | Get-Member -Static
[System.IO.Path]::GetExtension
zwraca rozszerzenie zawierające kropkę („.”) .źródło
Jeśli pochodzi z pliku tekstowego i przypuszczalnie plik z nazwą jest otoczony spacjami, jest to sposób:
Jeśli jest to plik, możesz użyć czegoś takiego w zależności od potrzeb:
źródło
źródło
Sprawdź właściwości BaseName i Extension obiektu FileInfo.
źródło
Użyj Split-Path
źródło
Split(".")[-1]
aby działał z plikami z kropkami w nazwiepo prostu to zrób:
źródło
$file.Basename
To jest adaptacja, jeśli ktoś jest ciekawy. Musiałem sprawdzić, czy RoboCopy pomyślnie skopiował jeden plik na wiele serwerów pod kątem jego integralności:
Ładny i prosty, pokazuje katalog i plik w nim. Jeśli chcesz określić jedną nazwę pliku lub rozszerzenie, po prostu zamień * na dowolne.
źródło
Począwszy od programu PowerShell 6,0,
Split-Path
ma-Extenstion
parametr. Oznacza to, że możesz:lub
Dla
$path = "test.txt"
obu wersji wróci.txt
, w tym kropka.źródło