Доступ к пакетным функциям в другом пакетном файле

Хорошо, так скажем, у нас есть файл с именем "lib.cmd", который он содержит

@echo off
GOTO:EXIT

:FUNCTION
     echo something
GOTO:EOF

:EXIT
exit /b

Затем у нас есть файл с именем "init.cmd", который он содержит

@echo off

call lib.cmd

Есть ли в любом случае для доступа:FUNCTION внутри init.cmd? Например, как bash использует "source", запустите другой bash-файл в том же процессе.

3 ответа

Решение

Измени свой lib.cmd выглядеть так;

@echo off
call:%~1
goto exit

:function
     echo something
goto:eof

:exit
exit /b

Затем первый аргумент передается в командный файл (%~1) определит как функцию, которую вы хотите вызвать, поэтому она будет вызываться с call:%~1и теперь вы можете позвонить в init.cmd в этом случае:

call lib.cmd function
@echo off

(
rem Switch the context to the library file
ren init.cmd main.cmd
ren lib.cmd init.cmd
rem From this line on, you may call any function in lib.cmd,
rem but NOT in original init.cmd:
call :FUNCTION

rem Switch the context back to original file
ren init.cmd lib.cmd
ren main.cmd init.cmd
)

Для получения дополнительной информации см. Как упаковать все мои функции в командный файл в отдельный файл?

Следующее берет решение @npocmaka и добавляет поддержку вызова функций с аргументами. Спасибо @jeb за улучшения. Сохраним следующее как lib.cmd:

      @echo off
shift & goto :%~1

:foo
set arg1=%~1
set arg2=%~2
echo|set /p=%arg1%
echo %arg2%
exit /b 0

Вы можете протестировать его с помощью:

      call lib.cmd foo "Hello World" !

И он будет печатать Hello World!.

Другие вопросы по тегам