我知道
我希望
我该如何实现这个目标?
%0
包含了批处理脚本的完整路径,例如c:\path\to\my\file\abc.bat
。我希望
path
等于c:\path\to\my\file
。我该如何实现这个目标?
%0
包含了批处理脚本的完整路径,例如c:\path\to\my\file\abc.bat
。path
等于c:\path\to\my\file
。%~dp0
将是该目录。 这里是有关所有路径修改器的一些文档。很有趣 :-)
要删除最后一个反斜杠,您可以使用:n,m
子字符串语法,如下所示:
SET mypath=%~dp0
echo %mypath:~0,-1%
很遗憾,我不认为有一种方法可以将%0
语法与:~n,m
语法结合起来。
%~0\..
,知道必须有更好的方法!此外,您可能需要用双引号(""
)将%~dp0
括起来,以防目录名中有空格等问题。 - CameronSET msg=hello world
可以正常工作)。但是,在其他地方使用%mypath%时,您要小心使用引号,尽管对于cd
也不需要。 - Martin PainSET mypath=%~dp0.
完全相同。 - phuclv\
,因为这将导致当脚本位于驱动器的根目录时产生意外的相对路径。因为D:\
(绝对路径)和D:
(相对路径)可能指向不同的位置,具体取决于当前的工作目录,但是D:\.
仍然是绝对路径... - aschipfl%~dp0
可能是一个相对路径。要将其转换为完整路径,请尝试类似以下的方法:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
呢? - jpaugh%~dp0
可能是相对的,这取决于使用情况是否有问题。 - Michael Mrozek%~dp0
不能包含相对路径,d
代表驱动器,p
代表路径,驱动器怎么可能是相对的呢? - jeb%~dp0
仍将是绝对路径。感谢jeb的评论,我没有被这个答案愚弄。为什么人们会编造东西并开始向他人散播他们的狂想呢?我有个同事就是这样做的,但我责怪他(年轻)年龄。我希望我投的反对票能够算数。 - bitooleanfor %%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%
表示当前工作目录,而不是批处理文件所在的目录。它们可以是相同的位置,但通常不是。 - Stephan那将是 %CD%
变量。
@echo off
echo %CD%
%CD%
返回批处理脚本所在的当前目录。
CD C:\Temp <CR> ECHO %CD%
(其中 <CR>
表示换行符)。 - Dean Harding