gpt4 book ai didi

Java Runtime.getRunTime().exec(CMD) 不支持管道

转载 作者:可可西里 更新时间:2023-11-01 09:48:13 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来显示并能够使用 JFrame 窗口更新您的 IP 地址设置。我正在考虑纯粹在 Windows 上运行它,所以我试图能够使用 netsh windows 命令来检索/设置详细信息。

Windows命令: netsh interface ip show config name="本地连接"|查找“IP”完全返回我想要的,但是我编写的代码将无法通过管道工作,只有当我写到“本地连接”部分时它才会工作。

有没有什么方法可以使用管道功能来专门返回 IP 地址?我读到您可以将该行作为字符串数组传递,即 String[] cmd = netsh ......

package ipchanger;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class test {

private String CMD;

public void executecommand(String CMD) {
this.CMD = CMD;

try {
// Run whatever string we pass in as the 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);
}
}


public test() {
String FINDIP = "netsh interface ip show config name=\"Local Area Connection\" | Find \"IP\"";
//System.out.println(FINDIP);
executecommand(FINDIP);

}


public static void main(String[] args) {
new test();
}
}

我想你们或许可以提供帮助。

最佳答案

幸运的是,有一种方法可以运行包含管道 的命令。该命令必须以 cmd/C 为前缀。例如:

public static void main(String[] args) throws Exception {
String command = "cmd /C netstat -ano | find \"3306\"";
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
if (process.exitValue() == 0) {
Scanner sc = new Scanner(process.getInputStream(), "IBM850");
sc.useDelimiter("\\A");
if (sc.hasNext()) {
System.out.print(sc.next());
}
sc.close();
} else {
Scanner sc = new Scanner(process.getErrorStream(), "IBM850");
sc.useDelimiter("\\A");
if (sc.hasNext()) {
System.err.print(sc.next());
}
sc.close();
}
process.destroy();
}

注释

关于Java Runtime.getRunTime().exec(CMD) 不支持管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13046789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com