Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java执行CMD命令?_Java - Fatal编程技术网

如何使用java执行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:",

我希望我的java程序执行以下操作:

访问cmd并执行命令:“d:”,“cd d:\Java Projects\imageProject”,“screenshot cmd”

我试着用谷歌搜索,找到了一些代码示例,但没有一个有效,因为我可能不知道自己在做什么

这就是我现在拥有的:

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。哦,是的,我的错。