首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单个cmd窗口中使用java运行时执行cd命令

如何在单个cmd窗口中使用java运行时执行cd命令
EN

Stack Overflow用户
提问于 2015-06-29 19:22:30
回答 3查看 6.9K关注 0票数 3

我需要在cmd提示符中执行以下更改目录命令,但是使用java来执行它们。dir命令工作正常,但cd命令不起作用。我必须在一个cmd窗口中执行它们。

代码语言:javascript
复制
cd inputDir
dir
cd outputDir

inputDir和outputDir是窗口中的目录。

Java片段:

代码语言:javascript
复制
ArrayList<String> dosCommands = new ArrayList<String>();
Process p;
for (int i=0;i< dosCommands.size();i++){
    p=Runtime.getRuntime().exec("cmd.exe /c "+dosCommands.get(i)); 
    p.waitFor();
    BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line=reader.readLine();
    while(line!=null) 
    { 
        System.out.println(line); 
        line=reader.readLine(); 
    } 
}

更新

将参数更改为cmd.exe /k而不是/c

代码语言:javascript
复制
p=Runtime.getRuntime().exec("cmd.exe /k "+dosCommands.get(i)); 

我不得不移除

代码语言:javascript
复制
p.waitFor(); 

方法,因为我被塞进去了。这样做,我知道我确实被塞进了

代码语言:javascript
复制
line.reader.readLine(); 
EN

回答 3

Stack Overflow用户

发布于 2015-06-29 19:24:27

使用

代码语言:javascript
复制
cmd.exe /K

代码语言:javascript
复制
cmd.exe /c

您可以找到更多关于cmd参数的信息。

使用/c,cmd完成并退出。使用/k,它不会退出。

__UPDATE__

我的意思是:

代码语言:javascript
复制
cd inputDir
dir
cd outputDir
exit

请注意最后一行。

__UPDATE 2__

请在代码中使用类似的内容,根据正在运行的过程,找出当前工作目录是什么:

代码语言:javascript
复制
public class JavaApplication1 {
  public static void main(String[] args) {
       System.out.println("Working Directory = " +
              System.getProperty("user.dir"));
  }
}

在此之后,让我们确保您想要cd的文件夹存在于该文件夹中。

票数 2
EN

Stack Overflow用户

发布于 2015-06-29 19:49:43

尝试这个实验:打开一个命令窗口(使用鼠标和/或键盘,而不是使用代码)。现在切换到另一个目录,使用类似于cd \cd C:\Windows的命令。

然后打开第二个命令窗口。它的当前目录是什么?它还记得你在第一个命令窗口做了什么吗?

它没有这样做,因为每次运行cmd.exe时,都会启动一个具有自己当前目录状态的新进程。

在您的代码中,您将在for-循环的每次迭代中执行一个新的cmd.exe进程。每次启动新的cmd.exe时,它都不知道当前目录在其他cmd.exe实例中可能是什么。

可以设置进程执行的当前目录:

代码语言:javascript
复制
String inputDir = "C:\\Users\\eleite\\Workspace\\RunCmd\\Petrel_Logs";
p = Runtime.getRuntime().exec("cmd.exe /c " + dosCommands.get(i),
    null, inputDir); 
票数 1
EN

Stack Overflow用户

发布于 2015-06-30 14:46:46

如果你想

  • 创建过程模拟控制台
  • 并让这个控制台执行几个命令
  • 在执行这些命令之后,从主线程继续执行代码。

然后试试下面的代码

代码语言:javascript
复制
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/k");
pb.redirectOutput(Redirect.INHERIT);//redirect process output to System.out
pb.redirectError(Redirect.INHERIT);//redirect process output to System.err
Process p = pb.start();

try(PrintWriter pw = new PrintWriter(new OutputStreamWriter(p.getOutputStream()), true)){
    pw.println("dir");//execute command 1, for instance "dir"
    pw.println("ver");//execute command 2, for instance "ver"
    //... rest of commands
    pw.println("exit");//when last command finished, exit console
}
p.waitFor();//this will make main thread wait till process (console) will finish (will be closed)
//here we place rest of code which should be executed after console after console process will finish
System.out.println("---------------- after process ended ----------------");

因此,如果您想要执行的命令列表,只需将它们放在这里:

代码语言:javascript
复制
try(PrintWriter pw = new PrintWriter(new OutputStreamWriter(p.getOutputStream()), true)){

    //here and execute them like 
    for (String command : dosCommands){
        pw.println(command);
    }        

    pw.println("exit");//when last command finished, exit console
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31123859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档