web-dev-qa-db-ja.com

パスからファイル名を抽出

パス(文字列)からファイル名を抽出する必要があります。

例:"C:\ folder\folder\folder\file.txt" = "file"(または、 "file.txt"でも開始できます)

基本的に最後の\を含むすべての前

正規表現の代わりにワイルドカードを使用することを聞いたことがあります(VBAでの奇妙な実装ですか?)。

事前に乾杯。

12
Matt Rowles

助けてくれて kaveman に感謝します。パスと拡張子の両方を削除するために使用した完全なコードは次のとおりです(完全な証明ではなく、小数点以下2桁以上を含むファイルは考慮されません。例:* .tar.gz)。

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

sFilename = "ファイル"

6
Matt Rowles

私はこれが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を使用して必要な長さを計算します

21
kaveman

コードのない解決策を探していました。この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))))
5
live-love

より簡単な方法は次のとおりです。a1行の関数で名前を抽出only—ファイル拡張子なし— your example で指定したとおり:

_Function getName(pf):getName=Split(Mid(pf,InStrRev(pf,"\")+1),".")(0):End Function
_

...だから、あなたの例を使って、これ:

MsgBox getName("C:\folder\folder\folder\file.txt")

戻り値:

"file"

ファイル拡張子を保持しながらファイル名を抽出する場合、またはのみを抽出する場合パス、ここにさらに2つ単一行関数があります:

_x:\path\filename_からファイル名を抽出:

_Function getFName(pf)As String:getFName=Mid(pf,InStrRev(pf,"\")+1):End Function
_

_x:\path\filename_からパスを抽出:

_Function getPath(pf)As String: getPath=Left(pf,InStrRev(pf,"\")): End Function
_

例:
examples

ソース

1
ashleedawg

Javaの使用:

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

`あなたも試すことができます:

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

このサブは、任意のファイルのフォルダ名を表示できます

0
Akash

そのためにFileSystemObjectを使用できます。

まず、de Microsoft Scripting RuntimeVB Editor Menu Bar> Tools> References))の参照を含めます。

その後、次のような関数を使用できます。

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ステートメント)を使用できます。

0
FCastro

フルファイル名を取得するためにkavemanの提案もうまく使用しましたが、フルファイル名に多数のドットがある場合は、次を使用して.txtビットを削除しました。

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