Passing Autumn

The same 3 years, and some people from students to as the MVP, and I was in place, then the code to show off the autumn wind, a little sad, a little cool!

Bulletin
Content is very powerful ~ ~ ~ ~ ~ ~ Do not look outside the invasion not as sharp and brother, I felt kind of sense of loss ~ ~ ~

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

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

Autumn Park is QBlog the official site, created by the passing autumn, based on the framework data layers developed cyqdata support multi-user, multi-language, multi-database (access, mssql, oracle), directory level url and other powerful blog system
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2013/5/12 2:07:42 | Other | |

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