Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Runtime.getRuntime().exec如何运行goto命令_Java_Command Line - Fatal编程技术网

Java Runtime.getRuntime().exec如何运行goto命令

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 &

我试图在java应用程序中运行小的命令行代码来删除它自己。因此,该命令将继续运行并不断尝试删除该文件,一旦应用程序关闭,它将被删除

我已经厌倦了将命令传递到Runtime.getRuntime().exec,但仍然无法让它工作

例如:

尝试这样做显然是错误的。我已经厌倦了使用;而不是&&但也不起作用

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
因此,您的一行代码可以如下所示(通过Windows
cmd
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)