0

我刚开始用 Java 编码,当我单击 JButton 时,我正在尝试制作一个运行 chkdsk 的程序。我将在这里放一些代码,以便你们可以帮助我:

String disk = JOptionPane.showInputDialog(Janela, "Especifique a letra do disco (Exemplo: C:)", "CHKDSK /F", JOptionPane.QUESTION_MESSAGE);
        if (disk.length() == 2 && disk.endsWith(":")) {
              try {
               String disk2 = ("fsutil dirty set " + disk)
               ProcessBuilder chkdskf = new ProcessBuilder("cmd.exe", "/C", "start", disk2);
               Process chkdskff = chkdskf.start();
              }
              catch (IOException fnfex2) {
               System.out.println ("Erro no CHKDSK /F");
             } 
            }

        else {
            JOptionPane.showMessageDialog(Janela, "Erro!", "Erro", JOptionPane.ERROR_MESSAGE);        
        }

因此,它显示了一个 InputDialog,因此您可以放置​​一个驱动器号(如 C: 或 D:),然后它会检查字符串是否是我想要的方式。(有两个字符并以“:”结尾)。然后,它使用命令启动一个新的 cmd 窗口,使 chkdsk 在下次重新启动时运行。但是,它不起作用。执行代码时打开的CMD窗口标题为“fsutildirty set C:”,但是什么也没发生,没有执行命令。任何帮助表示赞赏,并为我糟糕的英语感到抱歉。

4

2 回答 2

1

从命令行帮助start

STATE [“标题”] [/D 路径] ... [命令/程序] [参数]

因此,基于此,这意味着将其start作为fsutil dirty set C:标题 - 原因是因为参数的工作方式ProcessBuilder

数组中的每个元素都是发送到命令的单独参数,这非常有用,因为这意味着您无需担心引号或其他转义要求

所以,基于所有这些,你应该构建你的ProcessBuilder更像......

ProcessBuilder chkdskf = new ProcessBuilder("cmd.exe", "/C", "start", "Make it so", "fsutil", "dirty", "set", disk);
于 2017-04-30T02:16:51.180 回答
0

我不知道你的实施方式。但我有一个想法供你参考。让我们创建一个 .bat 文件,将执行语句写入此文件,然后调用以运行此 .bat 文件,如下所示:

Runtime.getRuntime().exec("cmd /c start " + "command.bat");
于 2017-04-30T01:28:30.387 回答