我有一個使用反斜線作為分隔符號並以單元格中的反斜線結尾的路徑名B5
,例如 \\stack\over\flow\
。我想把它減少到\\stack\over\
.我需要一個公式來\
從完整路徑中刪除最後一個和子路徑元件。
答案1
在C5中,輸入公式:
=REPLACE(B5,FIND("@",SUBSTITUTE(B5,"\","@",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1))+1,99,"")
答案2
建立在bosco_yip 的回答,簡化並解釋:
=LEFT(B5,FIND("|",SUBSTITUTE(B5,"\","|",LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))-1)))
SUBSTITUTE(B5,"\","")
刪除所有反斜線B5
(透過用空字串替換它們)。因此,例如,如果B5
是\\stack\over\flow\
,則這將是stackoverflow
。LEN(B5)-LEN(SUBSTITUTE(B5,"\",""))
是計算 中反斜線數量的常見技巧B5
。我們從中減去 1 即可得到倒數第二個反斜線的數量。SUBSTITUTE(B5,"\","|", <the above> )
將倒數第二個反斜線替換為|
(垂直線)。FIND("|", <the above> )
找到位置的|
,(大概/希望)是倒數第二個反斜線。當然,如果B5
已經包含任何垂直線,這裡就會出現問題,但請注意|
,Windows 路徑名稱中不允許這樣做。 (相較之下,@
是有效的 Windows 檔案名字符號。LEFT(B5, <the above> )
B5
透過(並包含)倒數第二個反斜線取得 up 的值。
請注意,如果 B5
僅包含一個 \
(例如 、 \
或),foo\bar
則 \Program Files
上面的程式碼將會出錯。如果 B5
是 \\
或 \\stack
,那麼結果將是 \
。
bosco_yip 的回答行為相同。