批处理中获取当前路径的方法可能有好几种,具体有几种我没有研究过,本文只是对其中的两种之间的差别进行简单说明

本文涉及的两个当前路径标示为:%cd%、%~dp0

注:我的系统是win7旗舰版,其它系统没有试过

我有两个批处理文件,分别是

E:/1.bat

E:/myproject/debug/autoreg.bat

其中1.bat调用autoreg.bat,内容如下:

call E:\myproject\Debug\autoreg.bat

第二个批处理文件autoreg.bat是用来注册和它在同一个目录中的一个控件,内容如下:

regsvr32 my.ocx

直接双击autoreg.bat,可以成功注册控件,如果双击1.bat文件,则提示注册失败,其中cmd窗口中显示:

E:>regsvr32 my.ocx

这个显示显然不正确,实际应该是:

E:\myproject\Debug>regsvr32 my.ocx

可以看出,1.bat调用autoreg.bat时,其当前路径不是 E:\myproject\Debug,而是E:\,所以注册失败

这个容易,直接在 my.ocx 的前面加上当前路径即可,如下:

regsvr32 %cd%\my.ocx

双击autoreg.bat,注册成功,再双击1.bat,结果还是注册失败,cmd窗口中显示如下:

E:>regsvr32 E:\\my.ocx

这里不仅仅是%cd%后面有无“\”的问题,而还是路径不对,看来这个%cd%有点不太好用。

再用第二个,即%~dp0来试,把autoreg.bat文件改成如下:

regsvr32 %~dp0my.ocx

注意,%~dp0后面不要那个“\”号,因为%~dp0是以“\”结尾的。(%cd%有点奇怪,在autoreg.bat中结尾是debug,而在1.bat中调用autoreg.bat时,却又是以“\”结尾的,所以如果要使用%cd%,则其后必需加上“\”,否则直接双击autoreg.bat时,路径就变成了 E:\myproject\Debugmy.ocx)

双击autoreg.bat注册成功,再双击1.bat也注册成功

总结:

%cd%是最初开始命令所在的当前路径,而%~dp0则是对应命令所在的当前路径

bat运行当前路径下程序的更多相关文章

  1. 在linux下,查看一个运行中的程序, 占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...

  2. winserve2008下不能运行winXP下开发的应用程序→更改“兼容性”

    winserve2008下不能运行winXP下开发的应用程序 对策:更该“兼容性”

  3. 在linux下,怎么去查看一个运行中的程序, 到底是占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...

  4. 让SH/BAT脚本定位到运行目录的相对位置,实现其脚本可在任意运行目录下被正确执行

    让SH/BAT脚本定位到运行目录的相对位置 实现其脚本可在任意运行目录下被正确执行 在Linux下的bash脚本 #!/bin/bash cd `` 在Windows下的BAT脚本 echo off ...

  5. linux下,一个运行中的程序,究竟占用了多少内存

    linux下,一个运行中的程序,究竟占用了多少内存 1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用 ...

  6. [转] Linux下程序的加载、运行和终止流程

    TAG: linux, main, _start DATE: 2013-08-08 原文地址: http://blog.csdn.net/tigerscorpio/article/details/62 ...

  7. 在windows系统下打包linux平台运行的go程序

    在windows系统下打包linux平台运行的go程序 1.先在main.go下打包成.exe可执行程序测试代码是否正确 //cd到main.go目录 go build //打包命令 如果打包成功则表 ...

  8. 如何查看Linux系统下程序运行时使用的库?

    Linux系统下程序运行会实时的用到相关动态库,某些场景下,比如需要裁剪不必要的动态库时,就需要查看哪些动态库被用到了. 以运行VLC为例. VLC开始运行后,首先查看vlc的PID,比如这次查到的V ...

  9. linux下命令运行目录上程序前面要加./

    linux命令行上默认运行path系统变量的路径的程序,所以我们在运行时命令时会在系统变量中查找,而发现查找完系统变量之后是不会再查找当前目录的. 有以下方式解决: 1.在运行当前目录的程序时,前面加 ...

随机推荐

  1. Error: Target id 'android-5' is not valid. Use 'android list targets' to get the target ids.

    输入命令: lianxumacdeMac-mini-2:hello-jni lianxumac$ android list targets Available Android targets: --- ...

  2. BZOJ1266:上学路线route (最短路+最小割)

    可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:“很可能我们在上学的路途 ...

  3. 【基于libRTMP的流媒体直播之 AAC、H264 推送】

    这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以 ...

  4. 【转】python文件打开方式详解——a、a+、r+、w+区别

    原文地址:http://blog.csdn.net/ztf312/article/details/47259805 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写, ...

  5. 【187】◀▶ 编辑博客的文本格式 & 装饰

    参考:博客园页面设置 参考:共享一下我的自定义CSS博客皮肤(2012.3) 一.文字周围带框框   插入一个代码,要折叠式,如下图所示: 史蒂夫 示例 选中“示例”,将其拷贝,然后黏贴,就有如下的效 ...

  6. UVa 1471 Defense Lines (二分+set优化)

    题意:给定一个序列,然后让你删除一段连续的序列,使得剩下的序列中连续递增子序列最长. 析:如果暴力枚举那么时间复杂度肯定受不了,我们可以先进行预处理,f[i] 表示以 i 结尾的连续最长序列,g[i] ...

  7. bzoj 1601: [Usaco2008 Oct]灌水【最小生成树】

    挺有意思的思路 如果不能自己打井,那么就是MST裸题了,考虑转换一下,自己打井就相当于连接一口虚拟的井(地下水?),所有井i到这口井的距离是w[i],这样把所有边排个序跑MST即可 #include& ...

  8. bzoj 4568: [Scoi2016]幸运数字【树链剖分+线段树+线性基】

    一眼做法,好处是好想好写坏处是常数大,容易被卡(bzoj loj 洛谷开O2 能AC,不开有90分-- 大概就是树剖之后维护线段树,在线段树的每个节点上上维护一个线性基,暴力\( 60^2 \)的合并 ...

  9. 洛谷P2572 [SCOI2010]序列操作(珂朵莉树)

    传送门 珂朵莉树是个吼东西啊 这题线段树代码4k起步……珂朵莉树只要2k…… 虽然因为这题数据不随机所以珂朵莉树的复杂度实际上是错的…… 然而能过就行对不对…… (不过要是到时候noip我还真不敢打… ...

  10. 自己动手利用CentOS6.5 搭建php环境安装discuz论坛

    1.安装搭建论坛必要的软件 apache php mysql CentOS系统我们可以直接使用 yum install 的方式进行软件安装,腾讯云有提供软件安装源,是同步CentOS官方的安装源,包涵 ...