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

16

好的,假设我们有一个名为"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个回答

24

将您的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

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
)

要了解更多信息,请参阅如何将所有函数打包在一个批处理文件中作为单独的文件?


3
以下是对 @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!


2
用简单的 goto :%~1 或者更好的 shift & goto :%~1 替换 call:%~1 %~2 .... - jeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接