0

.batプログラムを起動するスクリプトがありますjava。プログラムは、 が置かjavaれているフォルダーを削除します.batjava私はプログラムに触れる方法がありません。私はファイルを変更することしかできません.bat

問題は、.batファイルが削除されると、終了せずにすぐに実行を停止することです。javaただし、プログラムの終了後に実行するクリーンアップ タスクがいくつかあります。

ファイルを別の場所にコピーして、.bat削除されない場所で起動しようとしました。残念ながら、元のファイルを.bat削除すると、まだ実行中のため、同じクラッシュが発生し、終了しません。

以下に 2 つのサンプル ファイルを示します (この例では、ファイルが にあると仮定しますD:\tmp)。

削除.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"

launch.batコピーの実行がlaunch.bat最初の実行から分離されている場合、起動は機能します。

.bat実行中に削除されても実行を終了させる方法を知っている人はいますか?

4

5 に答える 5

3

これにより、スクリプトはそれ自体を削除して終了するように指示されます。行が実行される前にコマンド インタープリターによって行全体が読み取られるため、ファイルが存在しなくても、delete コマンドの後に exit コマンドが実行されます。

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)   
于 2013-04-29T21:45:16.833 に答える
1

削除されたファイルから行を実行することは可能ですが、ブロックは実行される前に常に完全にメモリにキャッシュされるため、行は括弧ブロックに存在する必要があります。

もちろん、バッチ内で関数を呼び出すことはできませんが、他のバッチ ファイルを呼び出して、制御を (ブロックに) 戻すことは可能です。

@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
于 2013-04-29T22:29:28.273 に答える
0

.bat が実行中に削除されたとしても、その実行を終了させる方法を知っている人はいますか?

私はそれが可能だとは思わない。ファイルから直接読み取られるバッチ実行。ファイルを変更すると、実行が変更されます (自己変更バッチ プログラムはデバッグが非常に困難です!)

別の場所からバッチ ファイルを開始してみませんか?

それができなくても、削除されない別のバッチ ファイルを呼び出して、1 行だけで構成されるファイルを作成することはできます。このファイルは、Java プログラムの開始、すべてのクリーンアップの実行、および複数回実行できるように元のバッチ ファイルの復元を含むすべてを行います。

于 2009-11-30T17:09:46.940 に答える
0

を介して launch.bat を実行する代わりに、完了cmd /c launch.bat時に制御を呼び出し元のバッチ ファイルに戻そうとします。次のようにして実行しますlaunch.bat 。ファイルであるため、存在しなくなったファイルに制御を戻そうとすることはありません。

于 2009-11-30T17:13:32.423 に答える