Estrarre il nome del file dal percorso

Ho bisogno di estrarre il nome del file da un percorso (una stringa):

ad esempio,
“C:\folder\folder\folder\file.txt” = “file” (o anche “file.txt” per me è iniziato)

Essenzialmente tutto prima e anche l’ultima \

Ho sentito parlare di utilizzo di caratteri jolly in luogo delle espressioni regolari (come è strano attuazione in VBA?) ma non riesco a trovare nulla di solido.

Brindisi in anticipo.

  • con quale linguaggio di programmazione?
  • VBA (specificato nel tag)
  • Mi dispiace, io non l’ho visto. La mia risposta include il codice Java.
  • Si potrebbe fare bene a guardare la guida di VBA per l’ ‘FileSystemObject, and its 'GetFileName metodo…

 

8 Replies
  1. 20

    Credo che questo funziona, utilizzando VBA:

    Dim strPath As String
    strPath = "C:\folder\folder\folder\file.txt"
    
    Dim strFile As String
    strFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))

    InStrRev appare per la prima istanza di “\” dalla fine, e restituisce la posizione. Right fa una sottostringa a partire dalla destra di lunghezza data, quindi, si calcola la lunghezza utilizzando Len - InStrRev

    • mi dispiace ho dovuto modificare: è necessario utilizzare Len(..) - InStrRev(..) per ottenere la differenza in lunghezza da tutta la stringa e la posizione dell’ultimo “\”, che è la lunghezza della sottostringa che si desidera prendere dalla destra. Ho provato questo in Excel2007 e mi ha dato “file.txt”
    • Questo è il punto su mate, grazie mille!
    • Ho aggiunto un’estensione della soluzione che risolve il mio scenario esatto. Grazie per l’aiuto bud!
    • Vedi il mio commento al di sotto di Matt Rowles risposta.
  2. 6

    Grazie a kaveman per l’aiuto. Qui c’è tutto il codice che ho usato per rimuovere il percorso e l’estensione (non è prova piena, non prendere in considerazione i file che contengono più di 2 decimali, ad esempio. *.tar.gz)

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

    sFilename = “file”

    • Per rimuovere solo l’ultima estensione (in nomi di file con più di un punto), l’uso InStrRev — cioè il cambiamento è l’ultima linea di sfilename = Left(sFullFilename, (InStrRev(sFullFilename, ".") - 1))
  3. 5

    Ero alla ricerca di una soluzione, senza codice. Questo VBA funziona nella Barra delle formule di Excel:

    Per estrarre il nome del file:

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

    Per estrarre il percorso del file:

    =MID(A1,1,LEN(A1)-LEN(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))))
    • Si potrebbe sostituire ~ per qualsiasi carattere speciale, se il vostro file ~ in esso.
  4. 1

    Utilizzo Di Java:

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

    Ho usato kaveman suggerimento di successo, nonché ottenere il nome Completo del File, ma a volte quando ho un sacco di Punti in mio Nome Completo del File, ho usato il seguente sbarazzarsi di .txt bit:

    FileName = Left(FullFileName, (InStrRev(FullFileName, ".") - 1))
    • È questa una domanda? Un commento? Non ha l’aspetto di una risposta…
    • Esso è stato inteso come un grazie e una risposta alternativa. Era la mia prima volta qui, quindi scusate se ho fatto qualcosa di sbagliato?
  6. 0

    `Si può anche provare:

    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

    Questo sub possibile visualizzare la Cartella nome del file

  7. 0

    È possibile utilizzare un oggetto FileSystemObject per che.

    Prima, includere un riferimento per de Microsoft Scripting Runtime (Editor di VB Barra dei Menu > Strumenti > Riferimenti).

    Dopo di che, è possibile utilizzare una funzione come questa:

    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

    Oggetti di Sistema di File sono molto utili per la manipolazione di file, soprattutto quando il controllo per la loro esistenza e li spostano. Mi piace l’uso precoce associato (istruzione Dim), ma si possono usare tardiva, se si preferisce (CreateObject istruzione).

  8. 0

    Qui il metodo più semplice: un una riga funzione per estrarre solo il nome senza l’estensione del file — come specificato nel il tuo esempio:

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

    …così, usando il tuo esempio, questo:

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

    restituisce:

    Estrarre il nome del file dal percorso

    Per i casi in cui si desidera estrarre il nome del file mentre mantenendo l’estensione del file, o se si desidera estrarre solo il percorso, qui ci sono due ulteriori singola riga di funzioni:

    Estrarre il nome del file dal x:\path\filename:

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

    Estratto di Percorso da x:\path\filename:

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

    Esempi:

    Estrarre il nome del file dal percorso

    (Fonte)

Lascia un commento