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

Cmd 如何使用autohotkey执行单个.java文件?,cmd,automation,autohotkey,Cmd,Automation,Autohotkey,我想用自动热键执行选定的java代码。通常我可以用以下命令执行单个java文件: javac execute.java //compiling and creating execute.class java execute //executing .class file 我想用自动热键自动化这个过程 ^+e:: sleep 30 Send ^c sleep 30 FileAppend,Clipboard,"C:\Users\q\Desktop\execute.java" sleep

我想用自动热键执行选定的java代码。通常我可以用以下命令执行单个java文件:

javac execute.java //compiling and creating execute.class
java execute       //executing .class file
我想用自动热键自动化这个过程

^+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

但我得到以下结果:。因此,我无法使用
results:=ComObjCreate(“WScript.Shell”).Exec(“cmd.exe java execute”).StdOut.ReadAll()
命令正确查看结果。如何解决此问题

您的脚本存在以下问题:

  • 你不需要那么多的睡眠
  • 某些参数的格式错误
  • 您需要一个循环来从
    WScript.Shell
    读取输出
  • 存在一些工作目录问题
  • 以下各项已经过测试:

    ^+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
    }
    

    您的脚本存在以下问题:

  • 你不需要那么多的睡眠
  • 某些参数的格式错误
  • 您需要一个循环来从
    WScript.Shell
    读取输出
  • 存在一些工作目录问题
  • 以下各项已经过测试:

    ^+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
    }
    

    你试过阅读stderr吗?谢谢。有关于“阅读stderr”的文档吗?t我不知道如何使用这个函数。我在谷歌上搜索了一下,找不到这个函数的任何实际演示。
    results:=ComObjCreate(“WScript.Shell”).Exec(“cmd.exe java execute”).stdder.read()我尝试了这个功能,但它抛出了未知名称错误。你尝试过阅读stderr吗?谢谢。有关于“阅读stderr”的文档吗?t我不知道如何使用这个功能。我在谷歌上搜索了一些东西,找不到这个功能的任何实际演示。
    结果:=ComObjCreate(“WScript.Shell”).Exec(“cmd.exe java execute”).StdDerr.Read()我尝试了这个,但它抛出了未知名称错误