我有一个路径名,它使用反斜杠作为分隔符,并在单元格中以反斜杠结尾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
获取直到倒数第二个反斜杠(包括该值)的值。
注意,如果 B5
仅包含一个 \
(例如 , \
或foo\bar
) \Program Files
,则上述操作将出错。如果 B5
是 \\
或 \\stack
,则结果将为 \
。
bosco_yip 的回答行为相同。