Board logo

标题: 求一个能取当前执行的bat文件所在目录方法。 [打印本页]

作者: cmd9x     时间: 2007-1-18 22:53    标题: 求一个能取当前执行的bat文件所在目录方法。

因为bat文件需要执行一个跟它在一个目录下的某个文件,但是bat文件的位置是不确定的,原来写成这样: SET CurPath=%0 IF NOT "%CurPath%"=="" set CurPath=%CurPath:~0,-9% echo %CurPath% 但是有时执行时是对的,有时得到的结果却是错的,要么前后都多一个字符,要不就都少一个字符。 谁能帮帮心,多谢了

作者: redtek     时间: 2007-1-18 23:00
%CD% 这个环境变量内容就是当前所在目录。 例:显示当前目录
@echo off

echo 当前目录是:%cd%

pause

作者: jmz573515     时间: 2007-1-18 23:20
高,加分。

作者: cmd9x     时间: 2007-1-18 23:58
这个我知道了,我是想说,如果我是这样执行bat C:\abc>D:\abc.bat 那么怎么取到"D:\abc"

作者: redtek     时间: 2007-1-19 00:23
@echo off

:: set "abc=%cd%"
echo 当前正在运行的批处理文件所在路径:%~dp0

pause

作者: hxuan999     时间: 2007-1-19 00:50
'%~dp0'所得到的路径中最后一个字符总是\,所有用的时候要注意了.比如调用它下面的abc.bat就要写成'%~dp0abc.bat', 另外你并不知道路径中有无空格,所以最好用双引号引起来,或是写成'%~sdp0'用路径的短名形式.

作者: cmd9x     时间: 2007-1-19 02:06
太厉害了,多谢了

作者: xuyuansheng     时间: 2007-1-20 00:28
但,如果你的这个批处理文件(x.bat)放到一个含有空格的路径中,将什么也得不到。 可以试试: [curpath.bat] echo %cd% > curpath.txt 查看curpath.txt就可以了。

作者: lxmxn     时间: 2007-1-20 07:21
>>curpath.txt echo="%cd%"

作者: jmz573515     时间: 2007-3-14 08:22
@echo off
setlocal EnableDelayedExpansion
echo 当前正在运行的批处理文件所在路径:!cd!
pause

作者: merryheart0424     时间: 2007-5-25 10:47
Originally posted by hxuan999 at 2007-1-19 12:50 AM: '%~dp0'所得到的路径中最后一个字符总是\,所有用的时候要注意了.比如调用它下面的abc.bat就要写成'%~dp0abc.bat', 另外你并不知道路径中有无空格,所以最好用双引号引起来,或是写成'%~sdp0'用路径的短名形式.
请教一下,'%~dp0' '%~sdp0' 具体是什么意思? 怎么我输入试了一下没有显示路径呢?

作者: lxmxn     时间: 2007-5-25 15:09
To merryheart0424: 演示一下:
@echo off
echo 当前的盘符及路径:%~dp0
echo 当前的盘符及路径的短文件名格式:%~sdp0
pause
保存为test.bat文件运行. [ Last edited by lxmxn on 2007-5-25 at 03:10 PM ]

作者: graper     时间: 2007-6-28 18:58    标题: 如何只取当前文件的上级目录名称

Originally posted by lxmxn at 2007-5-25 03:09 PM: To merryheart0424: 演示一下:
@echo off
echo 当前的盘符及路径:%~dp0
echo 当前的盘符及路径的短文件名格式:%~sdp0
pause
保存为test.bat文件运行 ...
上面这个直接以BAT方式运行可以工作,但如果用工具编译成EXE文件就不行了,路径会变成系统临时目录的路径:( 别外如果我只想取当前文件的上级目录名称如何写呢? 比如当前文件为C:\AAAA\BBB\TEST.BAT 我只要取得BBB这个目录名称 先谢谢了

作者: lxmxn     时间: 2007-6-28 20:59
上面这个直接以BAT方式运行可以工作,但如果用工具编译成EXE文件就不行了,路径会变成系统临时目录的路径:(
编译bat文件为exe文件的工具是死的东西,稍微把批处理变换一下就会出问题,似乎批处理的很多扩展功能,编译工具都完成的不是很好。 如果你只是为了迎合编译工具的要求,那就另当别论了。 取当前文件的上级目录的名称可以参考下面这个代码:
@echo off&SetLocal EnableDelayedExpansion
set a=D:\abc\def ghi\j k\lmn.bat
for %%a in ("%a%") do (
	set ok=%%~dpa
	for /f "delims=" %%b in ("!ok:~0,-1!") do (
		echo %%~nb
	)
)
pause

作者: byxyk     时间: 2007-6-28 21:15
%0这个参数并不是一成不变的。 1.资源管理器中双击执行 2.CMD中全路径运行 3.CMD中当前目录下运行

作者: lxmxn     时间: 2007-6-28 23:56
Originally posted by byxyk at 2007-6-28 21:15: %0这个参数并不是一成不变的。 1.资源管理器中双击执行 2.CMD中全路径运行 3.CMD中当前目录下运行
请问有何不同呢?

作者: liu3157551     时间: 2007-9-3 09:43
精品呀,要收藏了^_^ 2007年[9月3日9:33:53]星期一

作者: wxcute     时间: 2007-9-28 13:53
好东西,我找了很久了。正好用得上“%~dp0”这个东西真是牛。 多谢“redtek”。

作者: 不得不爱     时间: 2007-9-28 16:09
Originally posted by graper at 2007-6-28 18:58: 上面这个直接以BAT方式运行可以工作,但如果用工具编译成EXE文件就不行了,路径会变成系统临时目录的路径:( 别外如果我只想取当前文件的上级 ...
一般来说如果用工具编译成EXE文件,在运行EXE文件时,EXE文件会自动将EXE文件解密,其解密后的BAT文件就放在系统临时目录里,所以路径会变成系统临时目录的路径

作者: phywho     时间: 2008-3-13 00:58
厉害

作者: cao7113     时间: 2008-4-8 18:12
高手啊!值得学习,多谢分享!!