我知道%0包含批处理脚本的完整路径,例如c:\path\to\my\file\abc.batpath等于c:\path\to\my\file我怎么能做到呢?
%0
c:\path\to\my\file\abc.bat
path
c:\path\to\my\file
erhoui1w1#
%~dp0将是目录。这里有一些关于所有路径修饰符的文档。有趣的东西:-)要删除最后一个反斜杠,可以使用:n,m子字符串语法,如下所示:
%~dp0
:n,m
SET mypath=%~dp0 echo %mypath:~0,-1%
不幸的是,我不相信有一种方法可以将%0语法与:~n,m语法结合起来。
:~n,m
vfwfrxfs2#
%~dp0可能是一个相对路径。要将其转换为完整路径,请尝试以下操作:
pushd %~dp0 set script_dir=%CD% popd
ozxc1zmp3#
您可以使用以下脚本来获取不带结尾“\”的路径
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
jv2fixgn4#
%~ dp 0-返回脚本执行的路径
但是,重要的是要知道下面一个:
%CD%-返回运行时的当前路径,例如,如果您使用 “cd folder 1” 进入其他文件夹,然后使用 “cd folder 2”,则将返回folder 2之前的完整路径,而不是脚本所在的原始路径
bvjxkvbb5#
您可以使用%~dp0,d表示仅驱动器,p表示仅路径,0是批处理文件的完整文件名的参数。例如,如果文件路径是C:\Users\Oliver\Desktop\example.bat,则参数将等于C:\Users\Oliver\Desktop\,您也可以使用命令set cpath=%~dp0 && set cpath=%cpath:~0,-1%并使用%cpath%变量来删除结尾的斜杠。
set cpath=%~dp0 && set cpath=%cpath:~0,-1%
%cpath%
1mrurvl16#
如上所述,%~ dp 0将返回当前脚本的绝对驱动器和路径。%~ dp 0的实现严重损坏,如果通过引号中的路径调用bat脚本,则无法工作。由于cmd.exe是旧版产品,Microsoft拒绝修复此错误。有关详细信息,请参阅https://github.com/microsoft/terminal/issues/15212。
gupuwyp27#
%cd%将给予脚本运行的目录路径。只要跑:
%cd%
echo %cd%
gywdnpxw8#
这就是%CD%变量。
%CD%
@echo off echo %CD%
%CD%返回批处理脚本所在的当前目录。
8条答案
按热度按时间erhoui1w1#
%~dp0
将是目录。这里有一些关于所有路径修饰符的文档。有趣的东西:-)要删除最后一个反斜杠,可以使用
:n,m
子字符串语法,如下所示:不幸的是,我不相信有一种方法可以将
%0
语法与:~n,m
语法结合起来。vfwfrxfs2#
%~dp0
可能是一个相对路径。要将其转换为完整路径,请尝试以下操作:ozxc1zmp3#
您可以使用以下脚本来获取不带结尾“\”的路径
jv2fixgn4#
%~ dp 0-返回脚本执行的路径
但是,重要的是要知道下面一个:
%CD%-返回运行时的当前路径,例如,如果您使用 “cd folder 1” 进入其他文件夹,然后使用 “cd folder 2”,则将返回folder 2之前的完整路径,而不是脚本所在的原始路径
bvjxkvbb5#
您可以使用
%~dp0
,d表示仅驱动器,p表示仅路径,0是批处理文件的完整文件名的参数。例如,如果文件路径是C:\Users\Oliver\Desktop\example.bat,则参数将等于C:\Users\Oliver\Desktop\,您也可以使用命令
set cpath=%~dp0 && set cpath=%cpath:~0,-1%
并使用%cpath%
变量来删除结尾的斜杠。1mrurvl16#
如上所述,%~ dp 0将返回当前脚本的绝对驱动器和路径。%~ dp 0的实现严重损坏,如果通过引号中的路径调用bat脚本,则无法工作。
由于cmd.exe是旧版产品,Microsoft拒绝修复此错误。有关详细信息,请参阅https://github.com/microsoft/terminal/issues/15212。
gupuwyp27#
%cd%
将给予脚本运行的目录路径。只要跑:
gywdnpxw8#
这就是
%CD%
变量。%CD%
返回批处理脚本所在的当前目录。