使用批处理从路径中删除尾随反斜杠

Remove trailing backslash from a path with batch

我在变量中保存了这样一个文件名:

C:\Directory\Directory2\

现在我想要这个:

C:\Directory\Directory2

如何从文件名或最后一个字符中删除最后 \

您可以使用子字符串扩展:

set "var=C:\Directory\Directory2\"
echo %var:~0,1%

显然可能存在最后一个字符不是 \ 的情况。因此,我们宁愿测试是否是这种情况,然后才排除它。

if "%var:~-1%" == "\" set "var=%var:~0,-1%"

好吧,别这样!删除结尾的反斜杠可能会更改路径指向的目标;想想C:\——它指向驱动器的根目录,而C:指向当前目录它。

处理潜在尾部反斜杠的最可靠方法可能是附加 .,因为 C:\Directory\Directory2\ 等同于 C:\Directory\Directory2\.C:\Directory\Directory2C:\Directory\Directory2., 因为所有这些路径都指向完全相同的位置。

如果后缀因美观原因造成干扰,请在附加 .:

后通过 for loop 解决
set "dirPath=C:\Directory\Directory2\"
for %%I in ("%dirPath%.") do echo "%%~fI"

modifier ~f 定义解析路径并将相对路径转换为 ​​full/absolute 路径。

如果提供的路径甚至可能以 \. 结尾或类似于 C:.,附加另一个 . 将改变其目标;然而,这可以在附加 .:

之前通过另一个 for 循环来解决
set "dirPath=C:\Directory\Directory2\."
for %%J in ("%dirPath%") do for %%I in ("%%~fJ.") do echo "%%~fI"

请注意 for?* 一样解析 wildcards