Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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_Cmd_Runtime.exec - Fatal编程技术网

Java 打开cmd窗口并发出多个命令

Java 打开cmd窗口并发出多个命令,java,cmd,runtime.exec,Java,Cmd,Runtime.exec,我必须在java应用程序的后台打开或执行cmd窗口。它以前就这样做过,而且效果非常好: public String getEnvVar(String envVarName) throws Exception { String varName = "%" + envVarName + "%"; Process process = Runtime.getRuntime().exec( new String[]{"cmd.exe", "/C", "echo "

我必须在java应用程序的后台打开或执行cmd窗口。它以前就这样做过,而且效果非常好:

public String getEnvVar(String envVarName) throws Exception {
    String varName = "%" + envVarName + "%";
    Process process = Runtime.getRuntime().exec(
            new String[]{"cmd.exe", "/C", "echo " + varName}
    );
    BufferedReader input = new BufferedReader(
            new InputStreamReader(process.getInputStream())
    );
    varName = input.readLine();
    process.destroy();
    ...
我的问题是:我有一个不同类的不同实例,并试图以上面代码中的方式打开cmd窗口:

private void execute() {
    try {
        String batchData = batchContent();
        Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C", batchData});
        new File(sourceFile).delete();
        new File(sourceFolder).delete();
        process.destroy();
    } catch (IOException ie) {

    }
}
但这不起作用……我用谷歌找出了原因,但找不到真正的原因

甚至

由于测试原因,不会更改为我事先创建的临时文件夹

怎么了

编辑//

我现在试着:

private void upload() {
    try {
        //Process process = Runtime.getRuntime().exec(batchDataFile);
        //Process process = Runtime.getRuntime().exec("cmd.exe /C " + batchDataFile);
        Process process = Runtime.getRuntime().exec("cmd.exe /C " + "\"" + batchDataFile + "\"");
        //new File(sourceCodeFile).delete();
        //new File(batchDataFile).delete();
        //new File(sourceCodeFolder).delete();
        process.destroy();
    } catch (IOException ie) {
        ie.printStackTrace();
    }
}

另外,我还尝试在没有Java应用程序的情况下运行生成的批处理skcript,它可以正常工作

使用Java中的OS命令行是一种糟糕的风格。考虑编写.BAT脚本,启动java应用程序。可能有一个IOExExt,但没有捕获。记录异常或传播异常是一个很好的做法。。。我正在从java应用程序中执行批处理脚本。也没有例外。我已经为测试启用了日志记录。没有例外,就没有执行。但是显示了一个简单的println,它不是死代码。我知道您正在尝试使用来自java的OS命令。这是一种糟糕的风格。改为编写批处理脚本。是否尝试在单独的线程上运行?
private void upload() {
    try {
        //Process process = Runtime.getRuntime().exec(batchDataFile);
        //Process process = Runtime.getRuntime().exec("cmd.exe /C " + batchDataFile);
        Process process = Runtime.getRuntime().exec("cmd.exe /C " + "\"" + batchDataFile + "\"");
        //new File(sourceCodeFile).delete();
        //new File(batchDataFile).delete();
        //new File(sourceCodeFolder).delete();
        process.destroy();
    } catch (IOException ie) {
        ie.printStackTrace();
    }
}