2011-02-23 320 views
3

我回来之前用java程序执行.bat文件的问题。从java执行.bat文件?

当我执行我的java代码时,我不明白为什么它在我的Eclipse的项目目录中查找我的.bat文件。

我明确声明如下路径:"cmd.exe", "/C", "Start", "C:\\File\\batfile.bat" 如果有人能够清楚地解释我,请。 非常感谢!

我使用win xp和Eclipse Helios。

这里是我的代码:

String cmd; 
     try { 
      String[] command = { "cmd.exe", "/C", "Start", "C:\\File\\batfile.bat" }; 
       Runtime r = Runtime.getRuntime(); 
       Process p = r.exec(command); 
       p.waitFor(); 

       } catch (Exception e) 
       { 

       System.out.println("Execution error");} 
+0

它完美对我来说,使用您所提供的相同的例子。不知道什么是不工作。 – adarshr 2011-02-23 11:12:30

+1

尝试从控制台运行相同的类 – 2011-02-23 11:14:56

+3

请仔细检查您是否没有将bat文件命名为batfile.bat.txt。您可以通过转到“我的电脑”>“工具”>“文件夹选项”>取消选中“隐藏已知文件类型的扩展名”来完成此操作。 – adarshr 2011-02-23 11:16:00

回答

1

过程的cmd.exe(从PATH环境变量中挑选)与当前工作目录相同的父进程(的eclipse.exe = JAVA)创建。这很可能是c:\ eclipse或工作区目录。

如果找不到文件(C:\ File \ batfile.bat),它会尝试当前工作目录。如果使用Run As Java运行此代码,请尝试更改其中的工作目录。还要确保BAT文件确实存在。

+0

是的,如果我更改目录,我的意思是如果将c:\ Eclipse \ workspace \ myproject中的.bat文件复制,那么它工作正常。但是,如果我编译我的项目,并创建一个可运行的jar,并在另一台计算机上启动此代码将它的工作?以及为什么它在这里为其他人工作?谢谢 – user618111 2011-02-23 12:39:30

1

试试这个:

String com = System.getEnv("ComSpec") != null ? System.getEnv("ComSpec") : "C:\\Windows\\System32\\cmd.exe"; 

String[] command = { com, ...... } 

COMSPEC通常设置为CMD.EXE的路径。如果不是,请使用完整(预期路径)。您也可以在%SystemRoot%\ system32中查找它。甚至%路径%。但只是检查ComSpec比默认情况下使用cmd.exe更好。

正如其他人指出的,从Eclipse运行时,您的默认工作目录通常是Eclipse项目文件夹。

一般来说,不要依赖工作文件夹是有用的好习惯。而是指定所需任何路径,或搜索路径(如果应用程序不这样做)。从命令

1

删除Start - 这是不必要的 - 和尝试:

String[] command = { "cmd.exe", "/C", "C:\\File\\batfile.bat" }; 
0
Runtime.getRuntime().exec("cmd /c start C:\\File\\batfile.bat");