我知道 %0
包含批处理脚本的完整路径,例如 c:\path\to\my\file\abc.bat
我会 path
等于 c:\path\to\my\file
我怎么能做到这一点?
%~dp0
将是目录。 Here's some documentation on all of the path modifiers。好玩的东西 :-)
要删除最后的反斜杠,您可以使用 :n,m
子字符串语法,如下所示:
SET mypath=%~dp0
echo %mypath:~0,-1%
不幸的是,我不相信有办法将 %0
语法与 :~n,m
语法结合起来。
%~dp0
可能是相对路径。要将其转换为完整路径,请尝试以下操作:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
呢?
%~dp0
可以是相对的,这可能是也可能不是问题,具体取决于用例
%~dp0
不能包含相对路径,d
代表驱动器,p
代表路径,驱动器怎么可能是相对的?
%~dp0
将是一个绝对路径,即使脚本作为相对路径运行也是如此。感谢jeb的评论,我没有被这个答案愚弄。为什么人们只是编造一些东西,然后开始向他人传播他们疯狂的想象力。我有一位这样做的同事,但我责怪他(年轻)的年龄。我希望我的反对票能算数。
您可以使用以下脚本来获取路径,而无需尾随“\”
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
%~dp0 - 返回执行脚本的路径
但是,重要的是要知道以下一个:%CD% - 在运行时返回当前路径,例如,如果您使用“cd folder1”进入其他文件夹,然后使用“cd folder2”,它将返回完整路径,直到 folder2 和不是脚本所在的原始路径
您可以使用 %~dp0
,d 表示仅驱动器,p 表示仅路径,0 是批处理文件的完整文件名的参数。
例如,如果文件路径是 C:\Users\Oliver\Desktop\example.bat,那么参数将等于 C:\Users\Oliver\Desktop\,您也可以使用命令 set cpath=%~dp0 && set cpath=%cpath:~0,-1%
并使用 %cpath%
变量删除尾部斜杠。
%cd%
将为您提供运行脚本的目录路径。
赶紧跑:
echo %cd%
%CD%
是当前工作文件夹,而不是存储批处理文件的文件夹。它们可以在同一个位置,但通常不是。
那将是 %CD%
变量。
@echo off
echo %CD%
%CD%
返回批处理脚本所在的当前目录。
CD C:\Temp <CR> ECHO %CD%
(<CR>
是换行符...)
%~0\..
——知道必须有更好的方法!此外,您可能需要将%~dp0
括在双引号 (""
) 中,以防目录名称中包含空格等。SET msg=hello world
工作正常)。但是,当在其他地方使用 %mypath% 时,您要小心在引号中使用它,尽管cd
也不需要它们。%~dp0:~0,-1$
。仍然 - 非常好的答案。.
。它的工作方式与当前目录SET mypath=%~dp0.
完全相同.
;不要像您那样删除\
,因为当脚本位于驱动器的根目录中时,这会导致意外的相对路径,因为D:\
(绝对)和D:
(相对)可能指向不同的位置,取决于当前的工作目录,但D:\.
仍然是绝对的……