尝试通过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();
答案 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上。