访问另一个批处理文件中的批处理函数

时间:2013-11-05 20:54:44

标签: batch-file

好吧,我们假设有一个名为" lib.cmd"的文件。它包含

@echo off
GOTO:EXIT

:FUNCTION
     echo something
GOTO:EOF

:EXIT
exit /b

然后我们有一个名为" init.cmd"的文件。它包含

@echo off

call lib.cmd

无论如何都要访问:init.cmd中的FUNCTION?就像bash使用" source"也将另一个bash文件运行到同一个进程中。

3 个答案:

答案 0 :(得分:15)

将您的lib.cmd更改为这样;

@echo off
call:%~1
goto exit

:function
     echo something
goto:eof

:exit
exit /b

然后传递给批处理文件的第一个参数(%~1)将标识为您要调用的函数,因此将使用call:%~1调用它,现在您可以在{{{ 1}}这样:

init.cmd

答案 1 :(得分:4)

@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
)

有关详细信息,请参阅How to package all my functions in a batch file as a seperate file?

答案 2 :(得分:0)

以下采用@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!