在Java中执行批处理文件时出现问题

在Java中执行批处理文件时出现问题,java,batch-file,Java,Batch File,我试图在Java应用程序中执行批处理文件。代码如下: Runtime.getRuntime().exec("cmd /C start C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat"); 执行时,会出现一个错误对话框,提示“Windows找不到“C:/Documents”。请确保键入的名称正确….” 当我使用相同的代码执行另一个批处理文

我试图在Java应用程序中执行批处理文件。代码如下:

Runtime.getRuntime().exec("cmd /C start C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat");
执行时,会出现一个错误对话框,提示“Windows找不到“C:/Documents”。请确保键入的名称正确….”

当我使用相同的代码执行另一个批处理文件时,名为file.bat,位于C:/Temp文件夹中,它可以完美地工作

有人知道问题出在哪里吗?是关于间隔字符吗

提前感谢

编辑:

似乎只要要启动的可执行文件的路径包含在“.As”中,start命令就需要一个额外的参数。必须用“.As”将包含空格的参数包围起来,这有点让人困惑,因为当有一个没有空格的路径时,start命令会起作用,因此不会用空格括起来“。当我为文件夹c:/temp测试下面的代码时,发生了这种情况,它在没有附加参数的情况下工作

负责的参数是打开的窗口的标题。它必须是es第二个参数,如果它包含空格,则必须用“.”包围

我建议在标题和路径中始终使用“标题”

下面是更新后的命令:

你需要附上

c:/文档和设置/

带有“因为文件名包含空格。当使用带有参数的start命令时,需要包含标题”

对于Java,这将是:

Runtime.getRuntime().exec(“cmd/C 启动\“服务器\”C:/Documents和 设置/Zatko/My Documents/projectworkspace/IUG/external/apps/archive/runserver.bat\“”)

格里茨, GHad编辑:

似乎只要要启动的可执行文件的路径包含在“.As”中,start命令就需要一个额外的参数。必须用“.As”将包含空格的参数包围起来,这有点让人困惑,因为当有一个没有空格的路径时,start命令会起作用,因此不会用空格括起来“。当我为文件夹c:/temp测试下面的代码时,发生了这种情况,它在没有附加参数的情况下工作

负责的参数是打开的窗口的标题。它必须是es第二个参数,如果它包含空格,则必须用“.”包围

我建议在标题和路径中始终使用“标题”

下面是更新后的命令:

你需要附上

c:/文档和设置/

带有“因为文件名包含空格。当使用带有参数的start命令时,需要包含标题”

对于Java,这将是:

Runtime.getRuntime().exec(“cmd/C 启动\“服务器\”C:/Documents和 设置/Zatko/My Documents/projectworkspace/IUG/external/apps/archive/runserver.bat\“”)

格里茨,
GHad

使用数组更好:

String[] array = { ... };
Runtime.getRuntime().exec(array);


如果在其中一个参数中有空格,则使用数组尤其重要。

最好使用数组:

String[] array = { ... };
Runtime.getRuntime().exec(array);

如果在其中一个参数中有空格,则使用数组尤其重要。

此操作:

List templast=new ArrayList()

模板添加(“cmd”)

模板添加(“/C”)

模板添加(“开始”)

tempst.add(“backup.bat”)

processp=rt.exec(tempst.toArray(新字符串[]{}),null,新文件(路径))

此功能:

List templast=new ArrayList()

模板添加(“cmd”)

模板添加(“/C”)

模板添加(“开始”)

tempst.add(“backup.bat”)

processp=rt.exec(tempst.toArray(新字符串[]{}),null,新文件(路径))

应该有用

您需要引用带有空格或shell元字符的参数。而且
start
希望第一个引用的参数是窗口标题,所以给它一个空的,这样它就高兴了

应该有用


您需要引用带有空格或shell元字符的参数。而且
start
希望第一个引用的参数是窗口标题,所以给它一个空的,这样它就高兴了。

我确实按照说明做了。但是,当我运行代码时,DOS命令窗口出现,光标在C:\Documents and Settings\Zatko\My Documents\Project Workspace\IUG\>处闪烁,检查您的服务器是否已经启动。批处理文件可能会启动一个进程,使命令窗口保持打开状态。当我尝试使用仅包含pause命令的批处理时,它在这里工作得非常好。是否还需要将/to\更改为?问题似乎确实存在于路径中:任何批处理文件(如果位于主C:/文件夹中)都可以顺利执行。但是,如果相同的文件位于C:/Documents and Settings/Zatko/My Documents/Project Workspace/IUG/external/apps/archive/中,则无法正常工作……我确实按照说明进行了操作。但是,当我运行代码时,DOS命令窗口出现,光标在C:\Documents and Settings\Zatko\My Documents\Project Workspace\IUG\>处闪烁,检查您的服务器是否已经启动。批处理文件可能会启动一个进程,使命令窗口保持打开状态。当我尝试使用仅包含pause命令的批处理时,它在这里工作得非常好。是否还需要将/to\更改为?问题似乎确实存在于路径中:任何批处理文件(如果位于主C:/文件夹中)都可以顺利执行。但是,如果同一个文件位于C:/Documents and Settings/Zatko/My Documents/Project Workspace/IUG/external/apps/archive/中,那么它根本不起作用……你能举一个在上述情况下使用它的例子吗?我当然也有同样的想法并尝试过,但它不起作用!它只会打开一个命令窗口,当前文件夹作为项目根目录(与上面tony的评论中提到的相同)。我知道原因,请在下面查看我的答案。你能给出一个在上述情况下使用它的示例吗?我当然也这么认为
Runtime.getRuntime().exec("cmd /C start \"\" \"C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat\"");