Показать полную графическую версию : [решено] Выход из скрипта по exit
Доброго времени суток!
В примерах часто встречаю завершение пакетного файла путем перевода указателя на конец скрипта, например:
@echo off
ver | find "5.1.2600" goto winXP
goto end
:winXP
echo This is Microsoft Windows XP
...
:end
А если я использую exit для выхода, будет какая разница?
@echo off
ver | find "5.1.2600" goto winXP
exit
:winXP
echo This is Microsoft Windows XP
...
А если я использую exit для выхода, будет какая разница? »
Вы можете указать число — код возврата (он же ErrorCode, он же ErrorLevel), который может быть использован родительским процессом или пакетным файлом.
greg zakharov
20-06-2017, 16:33
Дело не только в коде возврата, но и корректном закрытии потока с помощью exit и высвобождению сопутсвующих ресурсов, в то время как вызов goto, во-первых, без особой надобности просто портит код, во-вторых, не посылает явным образом сигнал консоли, что все, мол, пора заквадрачиваться. Примерно так. И да, лучше указывать в батах exit /b, чтобы ненароком не закрыть саму консоль (если еще в ней предполагается работать).
корректном закрытии потока с помощью exit и высвобождению сопутсвующих ресурсов, в то время как вызов goto … не посылает явным образом сигнал консоли, что все, мол, пора заквадрачиваться. »
Что с exit, что без — по достижении конца пакетного файла его обработка будет завершена. Не могу понять это Ваш посыл.
greg zakharov
20-06-2017, 17:17
Iska, не мне Вас учить что cmd - та же программа (интерпретатор), оперирующая данными, под которые, если заглянуть под "капот" также выделяется место в памяти и прочее в этом духе. Оператор goto спректирован несколько кривовато, а потому его использование лучше ограничить областью видимости самого командного файла, а не как инструкцию выхода из последнего.
Всё равно не пойму. Вы имеете в виду, что в командный процессор после завершения пакетного файла по exit, по goto :eof и просто по завершении кода пакетного файла освобождает разное количество ранее выделенной на его исполнение оперативной памяти, так?
greg zakharov, если говорить о проектировании ПО, то корректнее все ветви завершения алгоритма собирать в одну точку выхода, или хотя бы группировать по результативности. Поэтому goto end - это хорошо, а раскиданные по коду exit и goto :eof - плохо.
greg zakharov
20-06-2017, 20:18
Iska, нет. По goto ресурсы освобождаются с некоторой задержкой.
Busla, проектирование ПО и сценарии командной строки - суть разные вещи.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.