如何使用java执行CMD命令?
我希望我的java程序执行以下操作: 访问cmd并执行命令:“d:”,“cd d:\Java Projects\imageProject”,“screenshot cmd” 我试着用谷歌搜索,找到了一些代码示例,但没有一个有效,因为我可能不知道自己在做什么 这就是我现在拥有的:如何使用java执行CMD命令?,java,Java,我希望我的java程序执行以下操作: 访问cmd并执行命令:“d:”,“cd d:\Java Projects\imageProject”,“screenshot cmd” 我试着用谷歌搜索,找到了一些代码示例,但没有一个有效,因为我可能不知道自己在做什么 这就是我现在拥有的: static void imageFromCMD(){ ProcessBuilder builder = new ProcessBuilder( "cmd.exe", "d:",
static void imageFromCMD(){
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "d:", "cd D:\\Java Projects\\imageProject",
"screenshot-cmd");
Process p = builder.start();
}
该代码没有失败,但我没有得到预期的输出(dir中的图像)
我想我错过了“发送”部分,但我该怎么做呢?你能试试这个吗
ProcessBuilder processBuilder = new ProcessBuilder();
Path workingDir = Paths.get("D:\\Java Projects\\imageProject");
processBuilder.directory(workingDir.toFile()); // Edited here
processBuilder.command(".\\screenshot-cmd");
try {
processBuilder.start();
} catch (Exception ex) {
ex.printStackTrace();
}
另一种选择是在创建ProcessBuilder
ProcessBuilder processBuilder = new ProcessBuilder("D:\\Java Projects\\imageProject\\screenshot-cmd");
try {
processBuilder.start();
} catch (Exception ex) {
ex.printStackTrace();
}
需要注意的一点是,如果在创建
ProcessBuilder
时未设置工作目录,则默认情况下,主进程的目录就是工作目录(基本上是从调用主类的位置),也许可以尝试查看那里的屏幕截图是否保存到该位置,首先找到要运行的确切cmd.exe行,然后将其填充到ProcessBuilder中,如下所示
new ProcessBuilder("cmd.exe", "/c", "cd /tmp & dir")
请注意,所有命令都应作为一个参数传递给cmd.exe。这是我检查Java版本的程序。希望这有帮助
import java.io.*;
public class RunCMDByJava {
public static void main(String[] args) throws Exception {
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "java -version");
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = br.readLine();
if (line == null) {
break;
}
System.out.println(line);
}
}
}
现在它说“无法在目录中运行screenshot cmd”,但当我手动执行时,它工作正常,我确保它的名称正确。您遇到了什么样的异常
SecurityException
?java.io.IOException:无法运行程序“screenshot cmd”(在目录“D:\java Projects\imageProject”中):CreateProcess error=2,系统找不到指定的超级有趣的文件,您能试试这个processBuilder.command(“.\\screenshot cmd”)代码>,基本上是说应该在当前工作目录中找到该命令。请尝试我最近的编辑尝试,如果这也不能解决它,我真的不知道为什么。此外,可执行文件是否具有.exe
扩展名?如果是这样,您必须在ProcessBuilder
配置中也包含扩展名,它是screenshot cmd
?只需一个从internet下载的.exe
就可以拍摄屏幕截图,并在按下/从cmd运行时保存。为什么不直接使用Java拍摄Sceen快照呢?如果pc是Mac,还可以看看会发生什么?意思是没有cmd.exe?因为问题是关于cmd的,我的理解是这一定是一个Windows。哦,是的,我的错。