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

How to get the path of the batch script in Windows?

我知道%0包含批处理脚本的完整路径,例如c:\path\to\my\file\abc.bat

我想用path等于c:\path\to\my\file

我怎么能做到?


目录将是%~dp0。下面是关于所有路径修饰符的一些文档。有趣的东西:

要删除最后的反斜杠,可以使用:n,m子字符串语法,如下所示:

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

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


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

1
2
3
pushd %~dp0
set script_dir=%CD%
popd


可以使用以下脚本获取路径而不跟踪""。

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


您可以使用%~dp0,d表示仅驱动器,p表示仅路径,0表示批处理文件的完整文件名的参数。

例如,如果文件路径为c:usersoliverdesktopexample.bat,则参数等于c:usersoliverdesktop,还可以使用命令set cpath=%~dp0 && set cpath=%cpath:~0,-1%和使用%cpath%变量删除尾随斜杠。


我在一台Windows7机器上工作,最后我使用下面的行来获取bash脚本的绝对文件夹路径。

我在查看了http://www.linuxjournal.com/content/bash-parameter-expansion之后找到了这个解决方案。

1
2
3
4
5
6
7
#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder


这就是%CD%变量。

1
2
@echo off
echo %CD%

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