使用java手动运行命令(使用cmd.exe)

使用java手动运行命令(使用cmd.exe),java,cmd,cd,Java,Cmd,Cd,因此,当我手动将其放入cmd时,以下内容将打开一个新的浏览器窗口: cd C:/Program Files (x86)/Google/Chrome/Application&chrome.exe 但是,当我试图通过java程序(见下文)执行此操作时,命令提示符会打开并转到正确的目录,但不会打开新窗口。你知道我需要改变什么吗 Runtime rt = Runtime.getRuntime(); rt.exec("cmd.exe /c start cd C:/Program

因此,当我手动将其放入cmd时,以下内容将打开一个新的浏览器窗口:

cd C:/Program Files (x86)/Google/Chrome/Application&chrome.exe
但是,当我试图通过java程序(见下文)执行此操作时,命令提示符会打开并转到正确的目录,但不会打开新窗口。你知道我需要改变什么吗

    Runtime rt = Runtime.getRuntime();
    rt.exec("cmd.exe /c start cd C:/Program Files (x86)/Google/Chrome/Application&chrome.exe");

尝试
ProcessBuilder
而不是
Runtime

String command = "C:/Program Files (x86)/Google/Chrome/Application&chrome.exe";
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command);
Process p = pb.start();
另见:


尝试
ProcessBuilder
而不是
运行时

String command = "C:/Program Files (x86)/Google/Chrome/Application&chrome.exe";
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command);
Process p = pb.start();
另见:

    • rt.exec(“cmd.exe/c start cd\”c:/Program Files(x86)/Google/Chrome/Application&Chrome.exe\”

      没有测试,但这会起作用,我只是把完整的路径用双引号引起来,因为有空格,所以它不被认为是下一个参数

      若那个不起作用,我建议试试图书馆,因为我总是用那个

      下面是我的一个应用程序的一些示例代码:

      CommandLine cmdLine = new CommandLine("cmd.exe");
                          cmdLine.addArgument("/c");
                          cmdLine.addArgument(".\\phantomjs\\nk\\batchbin\\casperjs.bat");
                          cmdLine.addArgument(".\\phantomjs\\nk\\batchbin\\dd.js");
                          cmdLine.addArgument(url);
                          cmdLine.addArgument(">" + rand);
                          DefaultExecutor executor = new DefaultExecutor();
                          int exitValue = executor.execute(cmdLine);
      
      使用上面类似的方法,chrome.exe的完整路径应作为新参数添加,然后库将负责转义。

      rt.exec(“cmd.exe/c start cd\”c:/Program Files(x86)/Google/chrome/Application&chrome.exe\”

      没有测试,但这会起作用,我只是把完整的路径用双引号引起来,因为有空格,所以它不被认为是下一个参数

      若那个不起作用,我建议试试图书馆,因为我总是用那个

      下面是我的一个应用程序的一些示例代码:

      CommandLine cmdLine = new CommandLine("cmd.exe");
                          cmdLine.addArgument("/c");
                          cmdLine.addArgument(".\\phantomjs\\nk\\batchbin\\casperjs.bat");
                          cmdLine.addArgument(".\\phantomjs\\nk\\batchbin\\dd.js");
                          cmdLine.addArgument(url);
                          cmdLine.addArgument(">" + rand);
                          DefaultExecutor executor = new DefaultExecutor();
                          int exitValue = executor.execute(cmdLine);
      

      使用上面类似的方法,chrome.exe的完整路径应作为新参数添加,然后库将负责转义。

      我使用以下方法运行chrome进程:

                  ProcessBuilder builder = new ProcessBuilder();            
                  builder.command("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe", "https://your url");            
                  Process process = builder.start();
                  int exitCode = process.waitFor();        
                  assert exitCode == 0;      
      

      我使用以下方式运行chrome进程:

                  ProcessBuilder builder = new ProcessBuilder();            
                  builder.command("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe", "https://your url");            
                  Process process = builder.start();
                  int exitCode = process.waitFor();        
                  assert exitCode == 0;      
      

      您是否尝试过rt.exec(“C:/ProgramFiles(x86)/Google/Chrome/Application/Chrome.exe”);我确实试过了,机器似乎在C:/程序上抛出了一个错误。似乎Runtime.exec(String)标记了字符串,但Runtime.exec(String[])没有,所以我最后的猜测是rt.exec(新字符串[]{“C:/ProgramFiles(x86)/Google/Chrome/Application/Chrome.exe”});您是否尝试过rt.exec(“C:/ProgramFiles(x86)/Google/Chrome/Application/Chrome.exe”);我确实试过了,机器似乎在C:/程序上抛出了一个错误。似乎Runtime.exec(String)标记了字符串,但Runtime.exec(String[])没有,所以我最后的猜测是rt.exec(新字符串[]{“C:/ProgramFiles(x86)/Google/Chrome/Application/Chrome.exe”});我来试一试。运行时和ProcessBuilder之间有什么区别?在您看来,我什么时候应该使用它们呢?老实说,我不知道确切的区别是什么,但我使用的是
      ProcessBuilder
      ,主要是因为您可以使用
      pb.environment().put(key,value)
      设置环境变量。另外,单独运行一个包含多个参数的命令更简单,而不是将它们写入一个大字符串中。运行时和ProcessBuilder之间有什么区别?在您看来,我什么时候应该使用它们呢?老实说,我不知道确切的区别是什么,但我使用的是
      ProcessBuilder
      ,主要是因为您可以使用
      pb.environment().put(key,value)
      设置环境变量。另外,单独运行包含多个参数的命令更简单,而不是将它们写入一个大字符串中。谢谢你的提示!实际上,我只是使用ApacheCommons库(由另一个来源推荐)解决了这个问题。谢谢你的提示!