我有这样一个文件名保存在一个变量:
C:\Directory\Directory2\
现在我想要这个
C:\Directory\Directory2
如何从文件名或最后一个字符中删除最后一个\?
\
bjp0bcyl1#
好吧,就是不要这样做!删除后面的反斜杠可能会改变路径指向的目标;想想C:\-它指向驱动器的 * 根目录 *,而C:指向它的 * 当前目录 *。处理可能出现的尾部反斜杠的最可靠方法可能是附加.,因为C:\Directory\Directory2\等效于C:\Directory\Directory2\.、C:\Directory\Directory2和C:\Directory\Directory2.,因为所有这些路径都指向完全相同的位置。如果后缀因外观原因而产生干扰,请在附加.后通过for loop解决:
C:\
C:
.
C:\Directory\Directory2\.
C:\Directory\Directory2.
for
set "dirPath=C:\Directory\Directory2\" for %%I in ("%dirPath%.") do echo "%%~fI"
modifier ~f定义解析路径,并将相对路径转换为完整/绝对路径。如果所提供的路径甚至可以以\.结束或者类似于C:.,则附加另一个.将改变其目标;然而,这可以通过在附加.之前的另一个for循环来解决:
~f
\.
C:.
set "dirPath=C:\Directory\Directory2\." for %%J in ("%dirPath%") do for %%I in ("%%~fJ.") do echo "%%~fI"
请注意,for像?和*一样解析wildcards。
?
*
qyyhg6bp2#
可以使用子字符串扩展:
set "var=C:\Directory\Directory2\" echo %var:~0,-1%
显然,可能存在最后一个字符不是\的情况,因此我们宁愿测试是否是这种情况,然后才排除它。
if "%var:~-1%" == "\" set "var=%var:~0,-1%"
2条答案
按热度按时间bjp0bcyl1#
好吧,就是不要这样做!删除后面的反斜杠可能会改变路径指向的目标;想想
C:\
-它指向驱动器的 * 根目录 *,而C:
指向它的 * 当前目录 *。处理可能出现的尾部反斜杠的最可靠方法可能是附加
.
,因为C:\Directory\Directory2\
等效于C:\Directory\Directory2\.
、C:\Directory\Directory2
和C:\Directory\Directory2.
,因为所有这些路径都指向完全相同的位置。如果后缀因外观原因而产生干扰,请在附加
.
后通过for
loop解决:modifier
~f
定义解析路径,并将相对路径转换为完整/绝对路径。如果所提供的路径甚至可以以
\.
结束或者类似于C:.
,则附加另一个.
将改变其目标;然而,这可以通过在附加.
之前的另一个for
循环来解决:请注意,
for
像?
和*
一样解析wildcards。qyyhg6bp2#
可以使用子字符串扩展:
显然,可能存在最后一个字符不是
\
的情况,因此我们宁愿测试是否是这种情况,然后才排除它。