【发布时间】:2024-01-20 16:42:01
【问题描述】:
我有这样一个文件名保存在一个变量中:
C:\Directory\Directory2\
现在我想要这个:
C:\Directory\Directory2
如何从文件名或最后一个字符中删除最后一个\?
【问题讨论】:
-
我想问你一开始是如何定义这个变量的。处理它的最好方法是预先定义,而不是发布。
标签: windows batch-file cmd path
我有这样一个文件名保存在一个变量中:
C:\Directory\Directory2\
现在我想要这个:
C:\Directory\Directory2
如何从文件名或最后一个字符中删除最后一个\?
【问题讨论】:
标签: windows batch-file cmd path
好吧,不要!删除尾部反斜杠可能会更改路径指向的目标;想想C:\——它指向驱动器的根目录,而C: 指向它的当前目录。
处理潜在的尾部反斜杠最可靠的方法可能是附加.,因为C:\Directory\Directory2\等价于C:\Directory\Directory2\.、C:\Directory\Directory2和C:\Directory\Directory2.,因为所有这些路径都指向完全相同的位置.
如果后缀因美观原因而受到干扰,请在附加 . 后通过 for loop 解决它:
set "dirPath=C:\Directory\Directory2\"
for %%I in ("%dirPath%.") do echo "%%~fI"
modifier ~f 定义解析路径并将相对路径转换为完整/绝对路径。
如果提供的路径甚至可能以\. 结尾或者类似于C:.,附加另一个. 将改变其目标;然而,这可以通过另一个 for 循环在附加 . 之前解决:
set "dirPath=C:\Directory\Directory2\."
for %%J in ("%dirPath%") do for %%I in ("%%~fJ.") do echo "%%~fI"
请注意,for 会像 ? 和 * 一样解析 wildcards。
【讨论】:
您可以使用子字符串扩展:
set "var=C:\Directory\Directory2\"
echo %var:~0,1%
显然,最后一个字符可能不是\。因此,我们宁愿测试是否是这种情况,然后才排除它。
if "%var:~-1%" == "\" set "var=%var:~0,-1%"
【讨论】: