Это должно сделать то, что вы ищете. Вам нужно убедиться, что формат даты правильный (как я уже догадался) и добавить дополнительную проверку.
Dim filename As String = "prod_orders_abc_20122001083000.dat"
filename = IO.Path.GetFileNameWithoutExtension(filename.Split("_").Last)
'yyyyddMMhhmmss
'20122001083000
Dim fileDate As Date
If Date.TryParseExact(filename, "yyyyddMMhhmmss", Globalization.CultureInfo.CurrentCulture, Globalization.DateTimeStyles.None, fileDate) Then
Debug.WriteLine(fileDate)
Else
Debug.WriteLine("unable to get date")
End If
Редактировать, извините, только что заметил, что вы хотели отсортировать их все ...
Sub main()
Dim filenames() As String =
{"prod_orders_abc_20122001083000.dat",
"prod_orders_abc_20122007083111.dat",
"prod_orders_xyz_20122003093157.dat",
"prod_orders_xyz_20122001083000.dat",
"prod_orders_abc_20122001163139.dat",
"prod_orders_abc_20122002093137.dat",
"prod_orders_xyz_20122001183000.dat",
"prod_orders_abc_20122001163139.dat",
"prod_orders_abc_20122001093137.dat"}
Dim SortedFileNames As List(Of String) =
filenames.OrderBy(Function(fileName) GetDateFromFileName(fileName)).ToList
End Sub
Private Function GetDateFromFileName(fileName As String) As Date
fileName = IO.Path.GetFileNameWithoutExtension(fileName.Split("_").Last)
'yyyyddMMhhmmss
'20122001083000
Dim fileDate As Date
If Date.TryParseExact(fileName, "yyyyddMMhhmmss", Globalization.CultureInfo.CurrentCulture, Globalization.DateTimeStyles.None, fileDate) Then
Return fileDate
Else
Return Date.MinValue
End If
End Function
Конечный модуль