中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 04:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求一个能取当前执行的bat文件所在目录方法。
楼 主 求一个能取当前执行的bat文件所在目录方法。 发表于 2007-01-18 22:53 ·  中国 广东 深圳 电信
新手上路
积分 8
发帖 3
注册 2007-01-18 21:59
UID 76920
性别 男
状态 离线
因为bat文件需要执行一个跟它在一个目录下的某个文件,但是bat文件的位置是不确定的,原来写成这样:
SET CurPath=%0
IF NOT "%CurPath%"=="" set CurPath=%CurPath:~0,-9%
echo %CurPath%
但是有时执行时是对的,有时得到的结果却是错的,要么前后都多一个字符,要不就都少一个字符。
谁能帮帮心,多谢了
2 发表于 2007-01-18 23:00 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
%CD% 这个环境变量内容就是当前所在目录。


例:显示当前目录

@echo off

echo 当前目录是:%cd%

pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
jmz573515 +4 2007-01-18 23:20
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
3 发表于 2007-01-18 23:20 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
UID 73417
性别 男
状态 离线
高,加分。
4 发表于 2007-01-18 23:58 ·  中国 广东 深圳 电信
新手上路
积分 8
发帖 3
注册 2007-01-18 21:59
UID 76920
性别 男
状态 离线
这个我知道了,我是想说,如果我是这样执行bat
C:\abc>D:\abc.bat
那么怎么取到"D:\abc"
5 发表于 2007-01-19 00:23 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线

@echo off

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

pause

    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
6 发表于 2007-01-19 00:50
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
UID 69523
性别 男
状态 离线
'%~dp0'所得到的路径中最后一个字符总是\,所有用的时候要注意了.比如调用它下面的abc.bat就要写成'%~dp0abc.bat',
另外你并不知道路径中有无空格,所以最好用双引号引起来,或是写成'%~sdp0'用路径的短名形式.
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
7 发表于 2007-01-19 02:06 ·  中国 广东 深圳 电信
新手上路
积分 8
发帖 3
注册 2007-01-18 21:59
UID 76920
性别 男
状态 离线
太厉害了,多谢了
8 发表于 2007-01-20 00:28 ·  中国 江苏 南京 电信
初级用户
积分 20
发帖 8
注册 2007-01-17 22:45
UID 76829
性别 男
状态 离线
但,如果你的这个批处理文件(x.bat)放到一个含有空格的路径中,将什么也得不到。

可以试试:
[curpath.bat]
echo %cd% > curpath.txt

查看curpath.txt就可以了。
9 发表于 2007-01-20 07:21 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

>>curpath.txt echo="%cd%"
10 发表于 2007-03-14 08:22 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
UID 73417
性别 男
状态 离线

@echo off
setlocal EnableDelayedExpansion
echo 当前正在运行的批处理文件所在路径:!cd!
pause
11 发表于 2007-05-25 10:47 ·  中国 北京 联通
初级用户
积分 28
发帖 10
注册 2007-04-25 04:51
UID 86377
性别 女
状态 离线
Originally posted by hxuan999 at 2007-1-19 12:50 AM:
'%~dp0'所得到的路径中最后一个字符总是\,所有用的时候要注意了.比如调用它下面的abc.bat就要写成'%~dp0abc.bat',
另外你并不知道路径中有无空格,所以最好用双引号引起来,或是写成'%~sdp0'用路径的短名形式.



请教一下,'%~dp0' '%~sdp0' 具体是什么意思? 怎么我输入试了一下没有显示路径呢?
12 发表于 2007-05-25 15:09 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
To merryheart0424:

演示一下:

@echo off
echo 当前的盘符及路径:%~dp0
echo 当前的盘符及路径的短文件名格式:%~sdp0
pause

保存为test.bat文件运行.

[ Last edited by lxmxn on 2007-5-25 at 03:10 PM ]
13 如何只取当前文件的上级目录名称 发表于 2007-06-28 18:58 ·  中国 贵州 遵义 电信
新手上路
积分 8
发帖 4
注册 2007-03-24 06:00
UID 82745
性别 男
状态 离线
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这个目录名称

先谢谢了
14 发表于 2007-06-28 20:59 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
上面这个直接以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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
26933062 +5 2007-09-28 19:18
15 发表于 2007-06-28 21:15 ·  中国 云南 玉溪 电信
初级用户
★★
积分 112
发帖 54
注册 2007-06-18 22:47
UID 91747
性别 男
状态 离线
%0这个参数并不是一成不变的。
1.资源管理器中双击执行
2.CMD中全路径运行
3.CMD中当前目录下运行
论坛跳转: