好的,假设我们有一个名为"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文件运行到同一进程中一样。
好的,假设我们有一个名为"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文件运行到同一进程中一样。
将您的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
)
要了解更多信息,请参阅如何将所有函数打包在一个批处理文件中作为单独的文件?
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!
。
goto :%~1
或者更好的shift & goto :%~1
替换call:%~1 %~2 ....
。 - jeb