Expandindo a resposta de René Nyffenegger, para aqueles que não têm acesso ao PowerShell versão 6.x, usamos Split Path, que não testa a existência do arquivo:
Split-Path "C:\Folder\SubFolder\myfile.txt" -Leaf
Isso retorna " myfile.txt ". Se soubermos que o nome do arquivo não contém pontos, podemos dividir a string e pegar a primeira parte:
(Split-Path "C:\Folder\SubFolder\myfile.txt" -Leaf).Split('.') | Select -First 1
ou
(Split-Path "C:\Folder\SubFolder\myfile.txt" -Leaf).Split('.')[0]
Isso retorna " myfile ". Se o nome do arquivo incluir pontos, para ser seguro, poderíamos usar o seguinte:
$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)
Isso retorna " myfile.txt.config ". Aqui, prefiro usar Substring () em vez de Replace () porque a extensão precedida por um ponto também pode fazer parte do nome, como no meu exemplo. Ao usar Substring, retornamos o nome do arquivo sem a extensão conforme solicitado.