在进行java开发时,经常需要使用bat去运行一些jar工具。比较常见的如tomcat、jboss等服务器都是通过bat去调用jar中的MAIN类来进行启动。在调用jar时,我们需要指定classpath等路径信息。下面将介绍怎样获取当前批处理文件的磁盘路径信息。
通常我们首先想到的做法是通过%cd%来获取当前磁盘路径信息,如下:@echooff
setcurrentBase=%cd%
echo%currentBase%
如果你的这个bat文件是被其他目录的bat文件进行调用的,此时%cd%获取到的值就不是你想要的值了。假如你有两个bat文件,分别如下C:\a.bat文件,C:\test\b.bat文件调用a.bat文件,文件代码如下:
a.bat文件@echooff
setcurrentBase=%cd%
echocurrentBase=%currentBase%
b.bat文件@echooff
call../a.bat
执行b.bat后输出的地址为 “C:\test”,而不是 “C:\”,因为%cd%获取的是当前运行目录地址。
使用%~dp0解决问题?
可以使用 %~dp0 获取当前bat文件的磁盘绝对路径(不包含文件名称)。修改b.bat文件如下:@echooff
echo%~dp0
执行该bat文件后,输出的地址为:“C:\test\”
其中:
%0是批处理文件本身的路径,%~dp进行扩展,d向前扩展到驱动器,p往后扩展到路径。因此,%~0为C:\test\b.bat,%~dp0为C:\test\。
常见命令
%i 提取第i个命令选项,i可以取值从1到9
%~i 提取第几个命令选项,i可以取值从1到9,提取的值不能包含引号
%~0 取文件名(名+扩展名)
%~f0 取全路径
%~d0 取驱动器名
%~p0 只取路径(不包驱动器)
%~n0 只取文件名
%~x0 只取文件扩展名
%~s0 取缩写全路径名
%~a0 取文件属性
%~t0 取文件创建时间
%~z0 取文件大小
以上选项可以组合起来使用。
实例:有个批处理文件 test.bat,代码如下:@echooff
echo%1
echo%~1
在cmd中输入命令:C:\>test.bat"test"
输出如下:
"test"
test