如何使用带有空格的文件夹名称的参数(即带有完整路径的文件名)从java运行bat文件

时间:2012-02-27 14:45:24

标签: java process runtime

尝试通过JAVA程序执行带有一些参数的bat文件。参数是带有完整路径的文件名,并且此路径有一些带空格的文件夹名称,这会产生问题并给我以下错误

  

错误:'D:\ Documents'未被识别为内部或外部   命令

代码如下

String command = "D:\Documents and Settings\ A.bat" + " " D:\Documents and Settings\B.xml



 1. process = Runtime.getRuntime().exec(new String[] {"cmd.exe","/c",command});
 2. process.waitFor();
 3. exitValue = process.exitValue();

4 个答案:

答案 0 :(得分:3)

您需要转义字符串中的\(即将它们加倍:D:\\Documents),但这不是问题。您可以尝试转义空格Documents\\ and\\ Settings,也可以使用为您执行此操作的exec method。只是不要自己构建命令行。最好使用ProcessBuilder来启动流程。

答案 1 :(得分:0)

String command = "\"D:\Documents and Settings\\" A.bat" + " \"D:\Documents and Settings\B.xml\""

转义双引号,因此您可以在文字中包含双引号,以提供:

cmd.exe /x "D:\Documents and Settings\" A.bat "D:\Documents and Settings\B.xml"

答案 2 :(得分:0)

我试图做同样的事情。我用Google搜索了一整天,但没有成功。最后,我以这种方式处理它,如果涉及到任何人的使用,我会分享它:

        String command = "A.bat D:\\Documents and Settings\\B.xml";
        File commandDir = new File ( "D:\\Documents and Settings ");        
        String[] cmdArray = { "cmd.exe", "/c", command };


        1. Process process = Runtime.getRuntime().exec( cmdArray, null, cmdArray );
        2. process.waitFor();
        3. exitValue = process.exitValue();

答案 3 :(得分:0)

我花了一段时间搜索SO和更广泛的互联网,当我遇到这个问题时,我想将这个问题发布为一个新问题,这看起来与我的问题完全相同......

我试图从Java调用Windows批处理文件。批处理文件有几个参数,但只有第一个,即数据文件的路径,与此问题相关。我一直在试验的缩减命令行基本上是:

cmd /c c:\path\to\my\batchfile.bat c:\path\to\my\datafile.mdl

我正在使用Apache Commons Exec,它最终委托Runtime.getRuntime().exec(String[] cmdarray, String[] envp, File dir),'正确'版本,而不是使用单String命令的重载版本。因此,当它们包含空格时引用参数。

现在,批处理文件的路径和/或数据文件的路径都可以包含空格。如果 批处理文件的路径,则数据文件的路径中包含空格,则执行批处理文件。但是如果两者都有空格,那么批处理文件的路径会在第一个空格处被截断。

这必须是(Java或Windows?)错误,对吧?我已经调试了create()中对java.lang.ProcessImpl的本机调用,似乎一切正常。我在JDK1.6上。