Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java运行时cmd提示符下输入命令_Java_Cmd - Fatal编程技术网

在Java运行时cmd提示符下输入命令

在Java运行时cmd提示符下输入命令,java,cmd,Java,Cmd,打开指向所需目录的命令提示符 要执行该文件夹中包含的程序,我需要从命令提示符执行“prpht0912 eorinput”,如下所示: Runtime.getRuntime().exec(new String[] { "cmd", "/c", "start", "cd", "M:\\MandNDrives\\mwallace\\PROPHET\\PROPHET\\Prophet2

打开指向所需目录的命令提示符

要执行该文件夹中包含的程序,我需要从命令提示符执行“prpht0912 eorinput”,如下所示:

Runtime.getRuntime().exec(new String[] {
            "cmd",
            "/c",
            "start",
            "cd",
            "M:\\MandNDrives\\mwallace\\PROPHET\\PROPHET\\Prophet2012"
            "prpht0912" //shortcut to prpht0912.exe
            "eorinput"  // eorinput.ind, input sheet that prpht0912.exe processes

但是,条目中的空格会在提示中返回一个错误:“系统找不到指定的路径”

不可能在一次调用
cmd.exe
时通过命令行执行两个命令:
cmd.exe/c
后面跟着一个命令,之后的另一个
/c
将被解释为该命令的参数

此外,两次调用它也不会得到您想要的结果,因为进程退出时会忘记对目录的更改,因此第二次调用将在Java进程的默认工作目录中运行,而不是在第一次调用时更改到的目录中运行

另外,这也是不幸的,但是Java没有提供一种方法来更改其自身进程的当前工作目录

在我看来,你有两个选择:

  • 确保Java程序在启动时将工作目录设置为需要子程序运行的目录
  • 调用一个包含需要运行的两个命令的
    .bat
    文件

  • 执行以下命令

    M:\MandNDrives\mwallace\PROPHET\PROPHET\Prophet2012>prpht0912 eorinput
    
    您需要以下内容

    M:\MandNDrives\mwallace\PROPHET\PROPHET\Prophet2012>prpht0912 eorinput
    
    注**

    当您传递一个数组时,PrimeBu建器将只考虑第一个元素作为程序,并将其保留为该程序的参数。

    String[] commands = new String[] { "cmd", "/c", "M:\\MandNDrives\\mwallace\\PROPHET\\PROPHET\\Prophet2012\\prpht0912.exe eorinput" };
            Runtime.getRuntime().exec(commands);
    

    定义绊倒的东西你确定是空间吗?如果您不是从M:驱动器运行,请使用cd/dI。我已经尝试了一个答案,但我只是根据我认为您正在尝试的操作猜测您的实际问题。如果我错了,您能否编辑您的问题,以包括您尝试过但不起作用的代码,以及更详细的错误描述?Tripping things up=“系统无法找到指定的路径”。此外,“prpht0912”是“prpht0912.exe”的快捷方式,但是此程序处理同一文件夹中包含的输入表“eorinput.ind”。虽然您可能无法更改当前应用程序的工作目录(没有可疑的类加载器黑客攻击)当然,您可以使用ProcessBuilder指定从JVM中启动的进程的工作目录。他可以为他希望启动的应用程序创建一个ProcessBuilder,并使用它生成一个新的流程对象。相应地设置工作目录。我将目标prpht0912.exe程序和组件移动到我正在使用的java目录。这就解决了问题。但是,如果/当我需要使用多个目录时,我将使用ProcessBuilder路线。谢谢
      String prog = cmdarray[0];