gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:54:24 25 4
gpt4 key购买 nike

我正在尝试在 java 应用程序中运行小型命令行代码来删除自身。因此该命令将继续运行并继续尝试删除该文件,一旦应用程序关闭,该文件就会被删除。

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

例如:

SET file="program.jar"
goto :d
:r
timeout /t 1
:d
del %file%
if exist %file% goto :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 标签。请改用某种 while TRUE 循环。用 cmd 术语来说:for/L %a in (1 0 2) do ...

其次,您需要申请Delayed Expansion 。证明:

==> 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

在上面的示例中,%_file%%time% 变量在解析时扩展。
另一方面,启用延迟扩展:!_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 验证锁定文件;循环直到解锁):

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)

关于java - Runtime.getRuntime().exec 如何运行 goto 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32872609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com