如何在Windows中获取批处理脚本的路径?

pgccezyw  于 2023-04-22  发布在  Windows
关注(0)|答案(8)|浏览(382)

我知道%0包含批处理脚本的完整路径,例如c:\path\to\my\file\abc.bat
path等于c:\path\to\my\file
我怎么能做到呢?

erhoui1w

erhoui1w1#

%~dp0将是目录。这里有一些关于所有路径修饰符的文档。有趣的东西:-)
要删除最后一个反斜杠,可以使用:n,m子字符串语法,如下所示:

SET mypath=%~dp0
echo %mypath:~0,-1%

不幸的是,我不相信有一种方法可以将%0语法与:~n,m语法结合起来。

vfwfrxfs

vfwfrxfs2#

%~dp0可能是一个相对路径。要将其转换为完整路径,请尝试以下操作:

pushd %~dp0
set script_dir=%CD%
popd
ozxc1zmp

ozxc1zmp3#

您可以使用以下脚本来获取不带结尾“\”的路径

for %%i in ("%~dp0.") do SET "mypath=%%~fi"
jv2fixgn

jv2fixgn4#

%~ dp 0-返回脚本执行的路径

但是,重要的是要知道下面一个:

%CD%-返回运行时的当前路径,例如,如果您使用 “cd folder 1” 进入其他文件夹,然后使用 “cd folder 2”,则将返回folder 2之前的完整路径,而不是脚本所在的原始路径

bvjxkvbb

bvjxkvbb5#

您可以使用%~dp0,d表示仅驱动器,p表示仅路径,0是批处理文件的完整文件名的参数。
例如,如果文件路径是C:\Users\Oliver\Desktop\example.bat,则参数将等于C:\Users\Oliver\Desktop\,您也可以使用命令set cpath=%~dp0 && set cpath=%cpath:~0,-1%并使用%cpath%变量来删除结尾的斜杠。

1mrurvl1

1mrurvl16#

如上所述,%~ dp 0将返回当前脚本的绝对驱动器和路径。%~ dp 0的实现严重损坏,如果通过引号中的路径调用bat脚本,则无法工作。
由于cmd.exe是旧版产品,Microsoft拒绝修复此错误。有关详细信息,请参阅https://github.com/microsoft/terminal/issues/15212

gupuwyp2

gupuwyp27#

%cd%将给予脚本运行的目录路径。
只要跑:

echo %cd%
gywdnpxw

gywdnpxw8#

这就是%CD%变量。

@echo off
echo %CD%

%CD%返回批处理脚本所在的当前目录。

相关问题