Доступ к пакетным функциям в другом пакетном файле
Хорошо, так скажем, у нас есть файл с именем "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!
.