使用java手动运行命令(使用cmd.exe)
因此,当我手动将其放入cmd时,以下内容将打开一个新的浏览器窗口:使用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
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库(由另一个来源推荐)解决了这个问题。谢谢你的提示!