如何在Windows批处理中同时调用内部函数?

如何在Windows批处理中同时调用内部函数?,windows,batch-file,Windows,Batch File,我有一个windows批处理,它从目录中读取我的配置文件(也是批处理文件)。现在我想调用一个内部函数来处理每个配置文件。由于它是一个for循环,因此文件会一个接一个地处理。但是我想同时为每个文件执行每个函数 到目前为止,我只找到了同时运行命令的解决方案,即“start”命令。但到目前为止,还没有解决内部函数的方法 背景:每个配置文件都包含许多具有不同值的变量,函数可以自动使用这些变量,而无需将它们作为参数传递。 每个配置文件都包含参数,以便使用这些参数执行sqlcmd,并处理和定义输出文件。由于

我有一个windows批处理,它从目录中读取我的配置文件(也是批处理文件)。现在我想调用一个内部函数来处理每个配置文件。由于它是一个for循环,因此文件会一个接一个地处理。但是我想同时为每个文件执行每个函数

到目前为止,我只找到了同时运行命令的解决方案,即“start”命令。但到目前为止,还没有解决内部函数的方法

背景:每个配置文件都包含许多具有不同值的变量,函数可以自动使用这些变量,而无需将它们作为参数传递。

每个配置文件都包含参数,以便使用这些参数执行sqlcmd,并处理和定义输出文件。由于变量太多,我不想将它们作为参数移交,因此不想将函数外包到单独的.bat文件中

代码摘录供参考:

FOR %%I IN ("%path_job_sheets%\*.bat") DO (CALL "%%I" & CALL :get_period "%%I")

:get_period
CALL LOTS OF VARIABLES
CALL :get_job

:get_job
DO MORE PARAMETER CALLING
需要执行“:get_period”,但批处理应该继续调用下一个.bat文件


有人有解决方案吗?

您可以使用
start

稍微更改一下您的文件,使其启动当前批处理文件本身(即
%~f0


如果您有许多作业,那么使用
start/b
在同一窗口中运行所有作业可能是一个好主意。

这实际上相当聪明,谢谢!能否
:thread_job
:get_job
仍然读取%%I(.bat文件)中设置的变量?此外,我需要批处理循环所有文件,但在退出循环之前,需要完成所有作业。有没有一种简单的方法来等待循环中的作业完成?
@echo off
if "%~1"=="thread_job" goto :thread_job

...

FOR %%I IN ("%path_job_sheets%\*.bat") DO (
    CALL "%%I"
    CALL :get_period "%%I"
)
exit /b

...

:get_period
set "fileName=%~1"
start "Title %filename%" cmd /c "%~f0" thread_job
exit /b

:thread_job
CALL LOTS OF VARIABLES
CALL :get_job