Подтвердить что ты не робот

Что-то вроде функции/метода в пакетных файлах?

есть ли что-нибудь, что подражает методу, как известно, с Java, С# и т.д.? У меня есть 5 строк команд в пакетном файле, эти 5 строк используются в более чем одном месте внутри командного файла. Я не могу использовать goto, потому что в зависимости от уровня ошибок, созданного этими 5 строками, у меня есть разные действия, которые следуют. Я попытался поместить мои 5 строк в пакетный файл 5lines.bat, но исходный пакетный файл original.bat вызывает только 5lines.bat и не выполняет команды после вызова 5lines.bat): То, как выглядит мой original.bat как:

5lines.bat
echo this gets never called, how to make sure this gets called?

Нет выхода или что-то вроде этого в 5lines.bat! Как я могу убедиться, что строка после вызова 5lines.bat?

4b9b3361

Ответ 1

Размещение многократно используемых функций в отдельный командный файл, безусловно, будет работать для имитации функции.

Уловка заключается в том, что вы должны использовать команду call, чтобы гарантировать, что элемент управления возвращается к вызывающему после завершения второго командного файла.

call 5lines.bat
echo this will now get called

Ответ 2

Вы можете использовать команду вызова:

call:myDosFunc

И затем определите функцию следующим образом:

:myDosFunc    - here starts the function
echo.  here the myDosFunc function is executing a group of commands
echo.  it could do a lot of things
goto:eof

Источник: Пакетные функции

Ответ 3

Решение:

@ECHO OFF     

call:header Start Some Operation

... put your business logic here
... make sure EXIT below is present
... so you don't run into actual functions without the call

call:header Operation Finished Successfully

EXIT /B %ERRORLEVEL%

:: Functions

:header
ECHO ================================================= 
ECHO %*
ECHO ================================================= 
EXIT /B 0

Важно поставить EXIT/B в конце каждой функции, а также до начала определения функций, в моем примере это:

EXIT/B% ERRORLEVEL%

Ответ 4

Вы можете попробовать использовать примеры, перечисленные на этой странице

В качестве альтернативы вы можете поместить общие строки в другой пакетный файл, который вы вызываете из основного.

Ответ 6

Вот "хак", который позволит вам "анонимные" функции в пакетных файлах:

@echo off
setlocal 
set "anonymous=/?"

:: calling the anonymous function
call :%%anonymous%% a b c 3>&1 >nul

:: here the anonymous function is defined
if "%0" == ":%anonymous%" (
  echo(
  echo Anonymous call:
  echo %%1=%1 %%2=%2 %%3=%3
  exit /b 0
)>&3
::end of the anonymous function

Анонимный функциональный блок должен быть размещен сразу после оператора вызова и должен заканчиваться оператором exit

трюк заключается в том, что CALL внутренне использует GOTO, а затем возвращается к строке, где был выполнен CALL. При двойном расширении появляется сообщение справки GOTO (с аргументом %%/?%%), а затем продолжается script. Но после того, как он будет завершен, он вернется к CALL - для чего нужен оператор if.