Извлечь имя файла из пути
Мне нужно извлечь имя файла из пути (строки):
например.,
"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).