Windows .bat脚本是否具有类似于退出陷阱的功能,这将允许注册始终需要运行的清理操作?
我对使用Powershell或其他shell的任何解决方案都不感兴趣(我已经在目标系统上安装了Python,所以如果在批处理文件中无法完成,我将在try中将一堆调用包装到subprocess.Popen中. ..最后).
不,没有例外,并且没有正式的方法来注册退出例程以在终止时自动运行.
但是,如果在脚本终止后不需要更改环境,则可以关闭.您可以在新的CMD会话中运行大部分脚本,然后您可以在父级别中拥有清理例程,只要控制台窗口未被终止,该例程将始终在终止时运行.如果内部脚本正常终止,或者由于Ctrl-C而终止,或者由于致命的语法错误而终止,控件将返回到外壳.
这是一个简单的演示:
@echo off
if "%~1" equ ":main" (
shift /1
goto main
)
cmd /d /c "%~f0" :main %*
echo Cleanup actions go here
exit /b
:main
echo Main actions go here
exit /b
Run Code Online (Sandbox Code Playgroud)
更新 - 黑客例外
我已经开发了一个有效的异常hack,只使用本机批处理命令 - 请参阅Windows批处理是否支持异常处理?.
可以在代码的任何级别抛出异常,异常冒泡,直到catch块处理异常.代码本身无法识别错误 - 必须由代码显式抛出每个异常.它也无法响应,致命的语法错误或关闭控制台.但如果这些限制是可以接受的,那么它是一种非常有效的安装清理代码的方法.
| 归档时间: |
|
| 查看次数: |
5640 次 |
| 最近记录: |