Java:showInputDialog 和 ProcessBuilder

Java: showInputDialog and ProcessBuilder

我刚开始在 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 window,并在下次重新启动时使用 make chkdsk 运行 命令。但是,它不起作用。执行代码时打开的CMDwindow标题为"fsutil dirty set C:",但是没有任何反应,没有执行任何命令。感谢您的帮助,抱歉我的英语不好。

不知道你是怎么实现的。但我有一个想法供你参考。让我们创建一个 .bat 文件,将执行语句写入该文件,然后像这样调用 运行 这个 .bat 文件:

Runtime.getRuntime().exec("cmd /c start " + "command.bat");

来自 start

的命令行帮助

STATE ["title"] [/D path] ... [command/program] [parameters]

因此,基于此,这意味着 startfsutil dirty set C: 作为标题 - 原因是参数在 ProcessBuilder 中的工作方式。

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

因此,基于所有这些,您应该构建您的 ProcessBuilder 更像...

ProcessBuilder chkdskf = new ProcessBuilder("cmd.exe", "/C", "start", "Make it so", "fsutil", "dirty", "set", disk);