Java Runtime.getRuntime().exec如何运行goto命令
我试图在java应用程序中运行小的命令行代码来删除它自己。因此,该命令将继续运行并不断尝试删除该文件,一旦应用程序关闭,它将被删除 我已经厌倦了将命令传递到Runtime.getRuntime().exec,但仍然无法让它工作 例如: 尝试这样做显然是错误的。我已经厌倦了使用;而不是&&但也不起作用Java Runtime.getRuntime().exec如何运行goto命令,java,command-line,Java,Command Line,我试图在java应用程序中运行小的命令行代码来删除它自己。因此,该命令将继续运行并不断尝试删除该文件,一旦应用程序关闭,它将被删除 我已经厌倦了将命令传递到Runtime.getRuntime().exec,但仍然无法让它工作 例如: 尝试这样做显然是错误的。我已经厌倦了使用;而不是&&但也不起作用 Runtime.getRuntime().exec("cmd /c \"SET file=\"program.jar\" && goto :d && :r &
Runtime.getRuntime().exec("cmd /c \"SET file=\"program.jar\" && goto :d && :r && timeout /t 1 && :d && del %file% && if exist %file% goto :r\"");
在.bat文件中工作得非常好,但如何将其实现到java.exec()方法中呢。
我可以只运行.bat文件,但我希望所有代码都包含在java中。首先,您不能在
cmd
一行中使用goto
s标签。使用某种而不是TRUE
循环。在cmd
术语中:for/L%a在(1 0 2)中做…
第二,你需要申请。证明:
在上面的示例中,%\u file%
和%time%
变量在解析时展开。在另一侧,启用延迟展开后:
_文件代码>和!时间代码>变量在执行时展开:
==> SET "_file=init.ext"
==> cmd /E /V /C SET "_file=prog.jar" ^& for /L %a in (1 1 2) do @echo !_file! !time! ^& timeout /T 3 1^>NUL
prog.jar 8:08:55,42
prog.jar 8:08:58,18
因此,您的一行代码可以如下所示(通过Windowscmd
CLI验证锁定的文件;循环直到解锁):
如果脚本是正确的,那么这可能是一个访问权限问题。为什么不使用java代码删除该文件呢?我知道脚本是正确的,但在将脚本正确地传递到.exec()方法时遇到了问题。更新了这个问题。你确定&
对Windows cmd有效吗?我建议你改用ProcessBuilder
并读取它的错误流第二个问题是,如果你将所有带有&&的命令移动到单独的temp.bat文件中,并通过Runtime.getRuntime().exec(“cmd/c temp.bat”)运行它会发生什么代码>?我已经厌倦了cmd中的一行程序,它工作得很好,但显然在使用.exec(…)时它什么也没做;对不起,java
不是我的咖啡杯:)也许有些字符应该正确转义?与纯cmd
CLI中使用的方式不同?我将尝试使用它。无论如何谢谢你!至少我现在有工作要做。
==> SET "_file=init.ext"
==> SET "_file=prog.jar" & for /L %a in (1 1 2) do @echo %_file% %time% & timeout /T 3 1>NUL
init.ext 8:05:55,33
init.ext 8:05:55,33
==> set _file
_file=prog.jar
==> SET "_file=init.ext"
==> cmd /E /V /C SET "_file=prog.jar" ^& for /L %a in (1 1 2) do @echo !_file! !time! ^& timeout /T 3 1^>NUL
prog.jar 8:08:55,42
prog.jar 8:08:58,18
cmd /E /V /C SET "_file=program.jar" ^& for /L %a in (1 0 2) do if exist "!_file!" (del "!_file!" ^& timeout /T 2) else (exit /B)