Расширяя ответ Рене Ниффенеггера, для тех, у кого нет доступа к PowerShell версии 6.x, мы используем Split Path, который не проверяет наличие файла:
Split-Path "C:\Folder\SubFolder\myfile.txt" -Leaf
Это вернет myfile.txt . Если мы знаем, что в имени файла нет точек, мы можем разделить строку и взять первую часть:
(Split-Path "C:\Folder\SubFolder\myfile.txt" -Leaf).Split('.') | Select -First 1
или
(Split-Path "C:\Folder\SubFolder\myfile.txt" -Leaf).Split('.')[0]
Это возвращает « myfile ». Если имя файла может включать точки, на всякий случай можно использовать следующее:
$FileName = Split-Path "C:\Folder\SubFolder\myfile.txt.config.txt" -Leaf
$Extension = $FileName.Split('.') | Select -Last 1
$FileNameWoExt = $FileName.Substring(0, $FileName.Length - $Extension.Length - 1)
Это вернет myfile.txt.config . Здесь я предпочитаю использовать Substring () вместо Replace (), потому что расширение, которому предшествует точка, также может быть частью имени, как в моем примере. Используя Substring, мы возвращаем имя файла без расширения по запросу.