用户点击退出时执行批处理代码

我正在做一些代码testing,而我偶然发现了一个我找不到或修复的问题。 我的问题是:

如果用户不小心closures了cmd窗口,我想在实际closures之前执行一个批处理代码。 例如:

我运行脚本A.bat。 当用户想要退出时,我想让它删除我的B.bat,然后closures窗口。
代码如下所示:

@ECHO OFF echo Welcome to A.bat del B.bat (when user exits the window) 

我在谷歌和论坛上找不到它,所以我想也许你们可以帮我一把。 在此先感谢,尼尔斯

Solutions Collecting From Web of "用户点击退出时执行批处理代码"

这适用于我:

 @ECHO OFF if "%1" equ "Restarted" goto %1 start "" /WAIT /B "%~F0" Restarted del B.bat goto :EOF :Restarted echo Welcome to A.bat echo/ echo Press any key to end this program and delete B.bat file echo (or just close this window via exit button) pause exit 

编辑一些解释添加

start命令在新的cmd.exe会话中重新启动相同的批处理文件; / B开关在同一个窗口中打开,并且/ WAIT开关使原始文件等待,直到新文件结束。 新的批处理文件必须以exit结束,以杀死新的cmd.exe会话(因为它是用/ K开关启动的)。 无论新的cmd.exe会话是否正常结束,因为exit命令或因为它被红色X取消; 在任何情况下,控制都会在原始执行中的行后面返回。

我不得不做类似于你所描述的东西。 我不确定这是否是最简单或最有效的方式来完成你所要求的,但它确实有效。

 @echo off setlocal :lockFile rem // create lock file to inform forked helper thread when this thread completes rem // credit to dbenham: http://stackoverflow.com/a/27756667/1683264 set "lockFile=%temp%\%~nx0_%time::=.%.lock" 9>&2 2>NUL (2>&9 8>"%lockFile%" call :main %*) || goto :lockFile del "%lockFile%" exit /b :main call :cleanup_watcher "B.bat" rem // put your main script here pause goto :EOF :cleanup_watcher <file> (<file> <file> etc.) rem // Write external script to delete filename arguments rem // (so if main script exits via ^C, temp files are still removed) >"%temp%\tmp.bat" ( echo @echo off echo setlocal echo :begin echo ping -n 1 -w 500 169.254.1.1 ^>NUL echo del /q "%temp%\%~nx0*.lock" ^>NUL 2^>NUL rem // If lockfile can't be deleted, the main script is still running. echo if exist "%temp%\%~nx0*.lock" goto :begin echo del /q "%temp%\tmp.bat" %* ^&^& exit ) rem // fork cleanup watcher invisibly to catch ^C >"%lockfile%.vbs" echo CreateObject("Wscript.Shell").Run "%temp%\tmp.bat", 0, False wscript "%lockfile%.vbs" del "%lockfile%.vbs"