cd /D "Full path of directory"
或pushd "Full path of directory"
与popd
前出口不如当前目录切换到任何目录上的任何驱动器(CD和PUSHD/POPD),或者甚至到网络共享(只是PUSHD/popd)。有关详细信息,请在命令提示符窗口cd /?
和pushd /?
中运行。
cmd /C
启动一个新的Windows命令进程,在执行最后一个命令后自动关闭进程。有关Windows命令解释器选项的详细信息,请在命令提示符窗口cmd /?
中运行。
start是在单独的进程中启动新的Windows命令进程或GUI /混合应用程序的命令。
所以你在这里做的是启动一个新的Windows命令过程,启动一个新的Windows命令过程。
在命令提示符窗口中运行start /?
输出此命令的帮助。 start经常将第一个双引号字符串解释为新命令进程的标题字符串。这经常会在命令行上引起麻烦,至少有一个双引号字符串。因此开始的使用往往需要用双引号作为第一个参数一个标题字符串为开始后开始一个明确的定义,甚至可以一个空字符串,即简单地""
作为第一个参数。
由于可以在命令提示符窗口中运行exit /?
后读取此命令,因此不带/B
的命令总是立即退出当前的Windows命令过程。所以当ant.exe
完成后,批处理文件处理的命令进程肯定会终止。
我没有Java开发经验,但在我看来应该足够使用下面的执行命令,它根本不需要批处理文件。
Java的代码行
Process p= Runtime.getRuntime().exec("cmd.exe /C cd /D \"" + jo.getString("Name") + "\" && ant.exe -f ..\\antbuild.xml analyse");
应该足以
- 启动一个新的Windows命令过程中,
- 设置该命令的过程中的当前目录由指定的驱动器和目录
jo.getString("Name")
这当然必须返回一个带有盘符的目录路径,并使用反斜杠作为目录分隔符,并在成功时返回
- 在此目录中执行
ant
并使用指定参数
- 在控制台应用程序自动终止Windows命令过程后
ant.exe
完成如果ant.exe
是控制台应用程序。
我不确定是否需要cmd.exe /C
。
我建议先在命令提示符窗口内手动测试这个命令。然后在Java应用程序中使用它,如果真的有效并产生预期结果。最后我会进一步测试在Java代码中是否需要cmd.exe /C
。
有关运营商&&
的详细信息,请参阅Single line with multiple commands using Windows batch file以在先前的命令成功后运行命令。另请参阅Why do not all started applications save the wanted information in the text files as expected?以获取控制台的说明/GUI/混合应用程序。
注:还有Java的Runtime
方法exec(String[] cmdarray, String[] envp, File dir)执行其参数与这可能是这个任务更好的第三个参数定义的目录-f
和..\antbuild.xml
和analyse
像ant.exe
的命令。
感谢您的回答,我在回调中使用了退出,并且工作,非常感谢。 –