路过秋天

同样的3年,有的人从学生到当了MVP了,而我却在原地,卖弄当年的代码,秋天的风,有点凄,有点凉!

公告信息
内涵是很强大的~~~别看外表~~~当犀利哥入侵不了的时候,感觉有种莫名的失落~~~
文章档案
最新评论

Setup Factory运行bat批处理文件错误记录

折腾秋式网站负载压力测试工具的客户端,需要打包安装程序。

于是搜了搜电脑,找到了最旧的那Setup Factory 7安装,其它步骤都好说。

倒有一个需求,就是安装完后,要运行一下其中的一个bat批处理文件来启动服务。

结果悲催的事就发生了,运行时总会遇到路径错误。。。

于是研究来研究,中间花了3-4小时,在Setup Factory 7->.NET 自带安装程序 ->自己写安装程序 ->换成Setup Factory 8版本,又遇到同样问题,又换回只好自己写程序。

中间也找了无数答案,没有一个有用的。。。

最后决定自己写了,没想到自己写的代码,在调用bat时,也发现路径问题了,这才恍然。

知道是bat自身的路径可能有问题,于是一搜,找到了以下相关文字:

获取批处理文件所在路径

       在开发时,经常需要使用批处理运行一些程序,java程序 犹其是这样,往往需要运行时根路径。Hardcode一个路径总是令自己觉得不自在,例如一个java程序从一台机copy到另外一台机,盘符往往发生变化,先修改一下bat里的路径再运行显然很麻烦。 
       在批处理开头加入cd /d %~dp0 一行代码就真真实实地做到“编写一次,到处运行”。%0是批处理文件本身的路径,%~dp进行扩展, d向前扩展到驱动器,p往后扩展到路径。例如,你的bat文件在e:/mybat/test.bat,则%0就是e:/mybat/test.bat, %~dp0是e:/mybat/。 
        另外,%i提取第i个命令选项,例如%1提取第1个option,i可以取值从1到9 
        %~0: 取文件名(名+扩展名) 
        %~f0:取全路径 
        %~d0:取驱动器名 
        %~p0:只取路径(不包驱动器) 
        %~n0:只取文件名 
        %~x0:只取文件扩展名 
        %~s0:取缩写全路径名 
        %~a0:取文件属性 
        %~t0:取文件创建时间 
        %~z0:取文件大小 
以上选项可以组合起来使用。


 基本明白了,最终答案不是运行不到bat文件,而是调用它的路径和里面的路径不是一致的。

如果我们双击bat,当前路径就是bat所在的路径。
如果用程序调用bat,当前路径就变成程序所在的路径。

所以批处理:%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /u WSTService.exe

像这样的路径,就找不到了。

解决方法就是在第一行,把路径设置好:

cd /d %~dp0
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /u WSTService.exe

改成这样,这样调用时就正常了。

秋色园是QBlog的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户、多语言、多数据库(access,mssql,oracle)、目录级url等功能强大的博客系统
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2013/5/12 2:07:42 | 记录点滴 | |

#1游客[注册][61.241.206.*]2013/5/12 21:46:48
cd /d 什么作用?
  • 发表评论