Use this function to break a full file name into four parts: a drive, a path, a filename, and an extension. It handles any missing parts. The function returns a table with the four parts as columns so you can use "cross apply" if needed.
select *
from dbo.FileNameSplitter('D:\MyDir\MySubDir\MyFile.MyExt')
It returns
"D:" as drive
"\MyDir\MySubDir\" as the path
"MyFile" as filename
"MyExt" as extension
OR try this:
SELECT physical_name, x.*
FROM sys.database_files df
cross apply (select * from dbo.FileNameSplitter(df.physical_name)) as x;