我发现了几个用于通过Java类运行cmd命令的代码段,但我无法理解。
这是打开cmd的代码
public void excCommand(String new_dir){ Runtime rt = Runtime.getRuntime(); try { rt.exec(new String[]{"cmd.exe","/c","start"}); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
我找到了一些其他链接来添加其他命令,例如cd http://www.coderanch.com/t/109753/Linux-UNIX/exec-command-cd-command-java
如何使用Java打开命令提示符并插入命令?
谁能帮助我了解如何CD目录,例如:
cd C:\Program Files\Flowella
然后在该目录上运行其他命令?
从Java程序的不同目录运行到工作目录的一种方法是更改目录,然后在同一命令行中运行该进程。你可以通过cmd.exe运行命令行 来完成此操作cd some_directory && some_program。
cmd.exe
cd some_directory && some_program
下面的示例更改为另一个目录并dir从该目录运行。诚然,我可以在dir不需要该目录的情况下访问该目录cd,但这只是一个示例:
dir
cd
import java.io.*; public class CmdTest { public static void main(String[] args) throws Exception { ProcessBuilder builder = new ProcessBuilder( "cmd.exe", "/c", "cd \"C:\\Program Files\\Microsoft SQL Server\" && dir"); builder.redirectErrorStream(true); Process p = builder.start(); BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while (true) { line = r.readLine(); if (line == null) { break; } System.out.println(line); } } }
还要注意,我正在使用a ProcessBuilder运行命令。除其他外,这使我可以通过调用将流程的标准错误重定向到其标准输出redirectErrorStream(true)。这样做只给我一个流可以读取。
a ProcessBuilder
redirectErrorStream(true)
这为我的机器提供了以下输出:
C:\Users\Luke\StackOverflow>java CmdTest Volume in drive C is Windows7 Volume Serial Number is D8F0-C934 Directory of C:\Program Files\Microsoft SQL Server 29/07/2011 11:03 <DIR> . 29/07/2011 11:03 <DIR> .. 21/01/2011 20:37 <DIR> 100 21/01/2011 20:35 <DIR> 80 21/01/2011 20:35 <DIR> 90 21/01/2011 20:39 <DIR> MSSQL10_50.SQLEXPRESS 0 File(s) 0 bytes 6 Dir(s) 209,496,424,448 bytes free