Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Выход из скрипта по exit (http://forum.oszone.net/showthread.php?t=327746)

rene 20-06-2017 13:57 2746100

Выход из скрипта по 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
  ...


Iska 20-06-2017 14:34 2746107

Цитата:

Цитата rene
А если я использую exit для выхода, будет какая разница? »

Вы можете указать число — код возврата (он же ErrorCode, он же ErrorLevel), который может быть использован родительским процессом или пакетным файлом.

greg zakharov 20-06-2017 16:33 2746126

Дело не только в коде возврата, но и корректном закрытии потока с помощью exit и высвобождению сопутсвующих ресурсов, в то время как вызов goto, во-первых, без особой надобности просто портит код, во-вторых, не посылает явным образом сигнал консоли, что все, мол, пора заквадрачиваться. Примерно так. И да, лучше указывать в батах exit /b, чтобы ненароком не закрыть саму консоль (если еще в ней предполагается работать).

Iska 20-06-2017 16:47 2746129

Цитата:

Цитата greg zakharov
корректном закрытии потока с помощью exit и высвобождению сопутсвующих ресурсов, в то время как вызов goto … не посылает явным образом сигнал консоли, что все, мол, пора заквадрачиваться. »

Что с exit, что без — по достижении конца пакетного файла его обработка будет завершена. Не могу понять это Ваш посыл.

greg zakharov 20-06-2017 17:17 2746137

Iska, не мне Вас учить что cmd - та же программа (интерпретатор), оперирующая данными, под которые, если заглянуть под "капот" также выделяется место в памяти и прочее в этом духе. Оператор goto спректирован несколько кривовато, а потому его использование лучше ограничить областью видимости самого командного файла, а не как инструкцию выхода из последнего.

Iska 20-06-2017 17:31 2746144

Всё равно не пойму. Вы имеете в виду, что в командный процессор после завершения пакетного файла по exit, по goto :eof и просто по завершении кода пакетного файла освобождает разное количество ранее выделенной на его исполнение оперативной памяти, так?

Busla 20-06-2017 17:35 2746145

greg zakharov, если говорить о проектировании ПО, то корректнее все ветви завершения алгоритма собирать в одну точку выхода, или хотя бы группировать по результативности. Поэтому goto end - это хорошо, а раскиданные по коду exit и goto :eof - плохо.

greg zakharov 20-06-2017 20:18 2746176

Iska, нет. По goto ресурсы освобождаются с некоторой задержкой.
Busla, проектирование ПО и сценарии командной строки - суть разные вещи.


Время: 22:47.

Время: 22:47.
© OSzone.net 2001-