如何使用Java执行Windows命令 - 更改网络设置

mre*_*mre 42 java windows runtime.exec

在Java中,我希望能够执行Windows命令.

有问题的命令是netsh.这将使我能够设置/重置我的IP地址.

请注意,我不想执行批处理文件.

我想直接执行这些命令,而不是使用批处理文件.这可能吗?


这是我实现的未来参考解决方案:

public class JavaRunCommand {
    private static final String CMD = 
        "netsh int ip set address name = \"Local Area Connection\" source = static addr = 192.168.222.3 mask = 255.255.255.0";
    public static void main(String args[]) {

        try {
            // Run "netsh" Windows command
            Process process = Runtime.getRuntime().exec(CMD);

            // Get input streams
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

            // Read command standard output
            String s;
            System.out.println("Standard output: ");
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }

            // Read command errors
            System.out.println("Standard error: ");
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

bad*_*oit 37

Runtime.getRuntime().exec("netsh");
Run Code Online (Sandbox Code Playgroud)

请参阅运行时 Javadoc.

编辑:leet稍后的回答表明此过程现已弃用.但是,根据DJViking的评论,似乎并非如此:Java 8文档.该方法不推荐使用.

  • 在我的环境中,我必须在命令前加上"cmd/c",即`Runtime.getRuntime().exec("cmd/c netsh");` (4认同)

lee*_*eet 28

使用 ProcessBuilder

ProcessBuilder pb=new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process process=pb.start();
BufferedReader inStreamReader = new BufferedReader(
    new InputStreamReader(process.getInputStream())); 

while(inStreamReader.readLine() != null){
    //do something with commandline output.
}
Run Code Online (Sandbox Code Playgroud)

  • 这个结论的基础是什么?查看javadoc,它未声明为已弃用.https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec-java.lang.String- (5认同)
  • `runtime.getRuntime().exec()`不被弃用. (2认同)

Mar*_*ajc 5

您可以使用Runtime.getRuntime().exec("<command>")(例如Runtime.getRuntime().exec("tree"))运行命令。但是,这将只运行可执行文件路径发现,没有命令,如echodel...但只有这样的东西tree.comnetstat.com...要运行常规命令,你将不得不把cmd /c命令之前(如Runtime.getRuntime().exec("cmd /c echo echo")