如何在单个命令中获取没有尾部反斜杠的批处理脚本的路径?

Joe*_*ech 32 command-line batch-file

假设我希望从批处理脚本本身获取批处理脚本的绝对路径,但没有尾部反斜杠.通常,我这样做:

SET BuildDir=%~dp0
SET BuildDir=%BuildDir:~0,-1%
Run Code Online (Sandbox Code Playgroud)

第一个语句获取带有反斜杠的路径,第二个行删除最后一个字符,即反斜杠.有没有办法将这两个语句组合成一行代码?

小智 43

对于许多软件而言,添加尾随点在语义上是等效的,而不是删除尾部反斜杠.

C:\ Windows 相当于 C:\ Windows \.

echo %dp0
>C:\Windows\

echo %dp0.
>C:\Windows\.
Run Code Online (Sandbox Code Playgroud)

例如,robocopy只接受没有尾随空格的目录.

出错了:

robocopy "C:\myDir" %~dp0 
Run Code Online (Sandbox Code Playgroud)

这很成功:

robocopy "C:\myDir" %~dp0.
Run Code Online (Sandbox Code Playgroud)

  • ***比删除尾部反斜杠更好***,它也有效.感谢那. (2认同)
  • 虽然它对于特定的 robocopy 用例当然很有用,但这不是 OP 所要求的。 (2认同)

Joe*_*oey 6

只有在将两个语句写入同一行时才会延迟扩展:

set BuildDir=%~dp0&&set BuildDir=!BuildDir:~0,-1!
Run Code Online (Sandbox Code Playgroud)

但这有点违背了目的.