通过批处理脚本启动Windows可执行文件,exe不在程序文件中

时间:2010-03-08 23:50:43

标签: windows command-line batch-file

这可能是批处理脚本101,但我找不到任何明确的解释/文档说明为什么会发生这种情况,或者我的解决方法实际上是解决方案。因此,基本上任何术语或与良好来源的链接都非常受欢迎。

所以我有一个程序,我想通过批处理脚本(以及其他几个程序)执行。它是exe不在Program Files文件夹中的唯一一个。我可以这样开始:

C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe

但是我得到了一个错误:

Run-time Error '3024':

Could not find file
C:\Users\MyUserName\Desktop\ModuleSettings.mdb

因此,程序似乎正在从批处理脚本启动的同一位置查找其设置文件。鉴于我最终通过以下方式完成了所有工作:

cd C:\WeirdProgram\WeirdProgramModule\
weirdmodule.exe

这很好,并且不得不走这条路(这只是一条额外的路线)并不是世界末日,但我已经说服自己,由于缺乏基本的理解,我做错了。

任何人都知道或可以指出为什么它会这样运作?

哦,并做了以下事情:

start "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe"

根本没有做任何事情。

谢谢,

2 个答案:

答案 0 :(得分:17)

你做得很完美: - )

可执行文件可能正在“当前工作目录”中查找此文件,该文件正在设置之前,当你以前“cd”它时。

您可以通过创建批处理文件的快捷方式手动设置工作目录;右键点击;属性。

编辑:

您还可以使用start命令设置当前的工作目录:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe"

编辑:

如果您想传递参数,只需将它们添加到可执行文件名中,就像在常规快捷方式中一样:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe" "param1 param2"

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe param1 param2"

作为参考,此处描述了语法:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true

答案 1 :(得分:5)

正在发生的事情是weirdmodule.exe正在.mdb文件的“当前目录”中查找。您可以通过命令行参数或其他一些配置方法(可能是注册表或.ini文件)告诉它在哪里找到.mdb文件。但是,如何指定位置完全取决于weirdmodule.exe程序。

除此之外,您当前的解决方法可能就是您所坚持的。

至于你使用start.exe的问题... start.exe程序有一个非常非常奇怪的行为(在我看来是奇怪的行为)将第一个参数视为“标题”如果(并且仅当)第一个参数在引号中,则放入窗口。所以你有几个选择:

  • 请勿使用引号指定程序。这对你有用,因为你不需要引号(路径中没有任何空格或其他特殊字符需要引用它):

    start C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe
    
  • 将空(或其他字符串)标题作为第一个参数。如果您的路径需要引用,那么您必须这样做:

    start "" "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe"