如何使用autohotkey执行单个.java文件?

时间:2018-05-02 16:53:53

标签: cmd automation autohotkey

我想用AutoHotkey执行选定的java代码。通常我可以使用以下cmd命令执行单个java文件:

javac execute.java //compiling and creating execute.class
java execute       //executing .class file

我想使用AutoHotkey自动执行此过程。我编写了以下AutoHotkey代码

^+e::
sleep 30
Send ^c
sleep 30
FileAppend,Clipboard,"C:\Users\q\Desktop\execute.java"
sleep 30
run cmd.exe,javac execute.java,hide  ; compiling successfully
sleep 2000
results := ComObjCreate("WScript.Shell").Exec("cmd.exe java execute").StdOut.ReadAll() ; can't display executing result
sleep 1000
msgbox % results
return

但我得到了以下结果:https://imgur.com/a/PwsxqEB results。因此我无法使用results := ComObjCreate("WScript.Shell").Exec("cmd.exe java execute").StdOut.ReadAll()命令正确查看结果。如何解决此问题?

1 个答案:

答案 0 :(得分:2)

您的脚本存在以下问题:

  1. 您不需要这么多Sleep
  2. 有些参数形式错误。
  3. 您需要一个循环来读取WScript.Shell的输出。
  4. 有一些工作目录问题。
  5. 以下测试工作:

    ^+e::
    Java_CopyCompileAndRun() {
        Static objShell := ComObjCreate("WScript.Shell")   ; Speeds up subsequent runs
        KeyWait Shift   ; Possilby unnecessary
        KeyWait e       ; Possilby unnecessary
        Clipboard := ""
        Send ^c
        ClipWait 1
        FileDelete % "C:\Users\q\Desktop\execute.java"
        FileAppend % Clipboard, % "C:\Users\q\Desktop\execute.java"
        RunWait % A_ComSpec " /c ""javac execute.java""", C:\Users\q\Desktop\, Hide
        objExec := objShell.Exec(A_ComSpec " /c ""cd ""C:\Users\q\Desktop\"" & java execute""")
        While !(objExec.StdOut.AtEndOfStream && objExec.StdErr.AtEndOfStream) {
            sStdOut   .= objExec.StdOut.ReadAll()
            , sStdErr .= objExec.StdErr.ReadAll()
            Sleep 10
        }
        MsgBox % "StdOut :`n" sStdOut "`n`nStdErr :`n" sStdErr
    }