我有一个.bat脚本发动java程序。 该D:\tmp程序删除其中launch.bat坐的文件夹。 我也没有办法接触到<=>程序。我只可以修改<=>文件。

在的问题是,<=>文件,一旦被删除,停止其执行权远没有完成。 但也有一些清理任务到<=>程序退出之后进行。

我试图复制<=>文件别的地方,在那里它不会被删除的位置启动它。可惜的是,一旦原来<=>被删除,因为它仍然在执行,同样的崩溃发生,并没有完成。

下面是两个示例文件(用于示例的目的,让我们假设它们存在于<=>):

<强> delete.bat

echo "delete start"

pause

del launch.bat

pause

echo "delete end"

<强> launch.bat

echo "launch start"

setlocal enabledelayedexpansion enableextensions 

if "%CD%"=="C:\tmp" (

    echo "in temp"
    d:
    cd \tmp
    delete.bat

)

if "%CD%" NEQ "C:\tmp" (

    echo "not in temp"
    mkdir C:\tmp
    copy launch.bat C:\tmp\launch.bat
    echo "launch copied"
    C:
    cd \tmp
    cmd /c launch.bat

)

echo "launch end"

启动<=>会工作,如果执行复制<=>从最初一个分离。

有谁知道一种方法,使一<=>结束了它的执行,即使当它执行它被删除?

有帮助吗?

解决方案 4

看来我有一个更好的结果通过做这样的(呼叫launch.batcmd /k):

<强> launch.bat

echo "launch start"

setlocal enabledelayedexpansion enableextensions 

if "%CD%"=="C:\tmp" (

        echo "in temp"
        d:
        cd \tmp
        delete.bat
        echo "after delete"
)

if "%CD%" NEQ "C:\tmp" (

        echo "not in temp"
        mkdir C:\tmp
        copy launch.bat C:\tmp\launch.bat
        echo "launch copied"
        C:
        cd \tmp
        cmd /k launch.bat

)

echo "launch end"

现在我可以到达echo "after delete",但我在无限循环中以某种方式结束。至少我清理可在此时执行。不知道为什么我不能达到echo "launch end",虽然。

其他提示

这将命令脚本删除本身然后退出。整行是由命令解释程序读取之前执行行,以便退出命令将即使文件不再存在delete命令之后被执行。

del /f/q "%~0" | exit

另外,你可以,如果你想后,文件已被删除的命令解释执行前会读括号内的一切执行很多命令,使用括号。

(del /f/q "%~0"
if exist "%~0" (echo.How did that happen?) else (echo.I've deleted myself.)
pause
exit)   
  

有谁知道一种方法,使一个.BAT结束了它的执行,即使当它执行它被删除?

我不认为这是可能的。批处理执行直接从文件中读取。如果修改了文件,它会改变执行(自我修改的批处理程序是极其困难的调试!)

你为什么不只是从不同的位置开始您的批处理文件?

即使你不能做到这一点,你可以做的是有只由一条线的文件,要求不被删除另一个批处理文件。这个文件做一切 - 启动java程序,做所有的清理,甚至包括恢复原来的批处理文件,这样就可以多次运行它

而不是通过cmd /c launch.bat,它会尝试当它完成转移回控制调用批处理文件,通过简单地做运行它运行launch.bat的:launch.bat 这将控制(认为它作为一个goto,而不是呼叫)转移到批处理文件,所以它不会试图控制返回到不再存在的文件。

有可能从已删除的文件执行线,但是在线路必须驻留在括号块,如在执行它们之前块总是完全地高速缓存到存储器中。

显然,你不能调用函数在批处理,但它是可以调用其他批处理文件并获得控制权交还给(成块)。

@echo off
(
  echo Delete myself
  del %~f0
  call ..\second.bat 
  echo do some other stuff after second.bat
)
echo This line can't be reached anymore
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top