【问题标题】:Remove trailing backslash from a path with batch使用批处理从路径中删除尾部反斜杠
【发布时间】:2024-01-20 16:42:01
【问题描述】:

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

C:\Directory\Directory2\

现在我想要这个:

C:\Directory\Directory2

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

【问题讨论】:

  • 我想问你一开始是如何定义这个变量的。处理它的最好方法是预先定义,而不是发布。

标签: windows batch-file cmd path


【解决方案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 定义解析路径并将相对路径转换为完整/绝对路径。

如果提供的路径甚至可能以\. 结尾或者类似于C:.,附加另一个. 将改变其目标;然而,这可以通过另一个 for 循环在附加 . 之前解决:

set "dirPath=C:\Directory\Directory2\."
for %%J in ("%dirPath%") do for %%I in ("%%~fJ.") do echo "%%~fI"

请注意,for 会像 ?* 一样解析 wildcards

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】: