Нет, исключений нет и нет формального способа регистрации процедуры выхода для автоматического запуска после завершения.
Однако вы можете приблизиться, если вам не нужны изменения среды, которые необходимо сохранить после завершения сценария. Вы можете запустить большую часть своего скрипта в новом сеансе 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
UPDATE - взломанные исключения
С тех пор я разработал эффективный исключение хак, не используя ничего, кроме родных команд партии - См Does Windows batch support exception handling?.
Исключения могут быть выброшены на любом уровне вашего кода, и исключение пузырится до тех пор, пока блок catch не обработает исключение. Код не может распознавать ошибки самостоятельно - каждое исключение должно быть явно выбрано вашим кодом. Он также не может реагировать на фатальные ошибки синтаксиса или закрытую консоль. Но если эти ограничения приемлемы, то это чрезвычайно эффективный способ установки кода очистки.
Что вызывает вопрос? –
Я хочу, чтобы некоторые временные файлы блокировки очищались в конце командного файла. – antony