Извлечь имя файла из пути

Мне нужно извлечь имя файла из пути (строки):

например., "C:\folder\folder\folder\file.txt" = "file" (или даже "file.txt", чтобы начать работу)

По сути, все до и после последнего \

Я слышал об использовании подстановочных знаков вместо Regex (как это нечетная реализация в VBA?), но не может найти ничего твердого.

Приветствия заранее.

Ответ 1

Благодаря kaveman за помощью. Вот полный код, который я использовал для удаления и пути, и расширения (он не является полным доказательством, не учитывает файлы, содержащие более двух десятичных знаков, например. *.tar.gz)

sFullPath = "C:\dir\dir\dir\file.txt"   
sFullFilename = Right(sFullPath, Len(sFullPath) - InStrRev(sFullPath, "\"))
sFilename = Left(sFullFilename, (InStr(sFullFilename, ".") - 1))

sFilename = "file"

Ответ 2

Я считаю, что это работает, используя VBA:

Dim strPath As String
strPath = "C:\folder\folder\folder\file.txt"

Dim strFile As String
strFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))

InStrRev ищет первый экземпляр "\" с конца и возвращает позицию. Right создает подстроку, начинающуюся справа от заданной длины, поэтому вы вычисляете необходимую длину с помощью Len - InStrRev

Ответ 3

Я искал решение без кода. Этот VBA работает в строке формул Excel:

Чтобы извлечь имя файла:

=RIGHT(A1,LEN(A1)-FIND("~",SUBSTITUTE(A1,"\","~",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

Чтобы извлечь путь к файлу:

=MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))

Ответ 4

Использование Java:

String myPath="C:\folder\folder\folder\file.txt";
System.out.println("filename " +  myPath.lastIndexOf('\\'));

Ответ 5

Я также использовал предложение kaveman, чтобы получить полное имя файла, но иногда, когда у меня много точек в моем полном имени файла, я использовал следующее, чтобы избавиться от бит .txt:

FileName = Left(FullFileName, (InStrRev(FullFileName, ".") - 1))

Ответ 6

`Вы также можете попробовать:

Sub filen() Dim parts() As String Dim Inputfolder As String, a As String 'Takes input as any file on disk Inputfolder = Application.GetOpenFilename("Folder, *") parts = Split(Inputfolder, "\") a = parts(UBound(parts())) MsgBox ("File is: " & a) End Sub

Этот суб может отображать имя папки любого файла

Ответ 7

Для этого вы можете использовать FileSystemObject.

Сначала включите ссылку для Microsoft Scripting Runtime (панель меню редактора VB > Инструменты > Ссылки).

После этого вы можете использовать такую ​​функцию, как этот:

Function Get_FileName_fromPath(myPath as string) as string
    Dim FSO as New Scripting.FileSystemObject

    'Check if File Exists before getting the name
    iF FSO.FileExists(myPath) then
        Get_FileName_fromPath = FSO.GetFileName(myPath)
    Else
        Get_FileName_fromPath = "File not found!"
    End if
End Function

Объекты файловой системы очень полезны для работы с файлами, особенно при проверке их существования и перемещении. Мне нравится использовать их с ранней привязкой (оператор Dim), но вы можете использовать их позже, если хотите (CreateObject statement).