Calling function from included batch file with a parameter

前端 未结 3 1198
庸人自扰
庸人自扰 2021-01-14 07:15

In my main batch file I include another batch file and want to call a function defined in there, code looks like following:

@echo off
call define_wait.bat

i         


        
3条回答
  •  感情败类
    2021-01-14 07:56

    Although there are several ways to call a function that reside in a separate library file, all methods require to change the way to call the library functions in the calling program, and/or insert additional code at beginning of the library file in order to identify the called function.

    There is an interesting trick that allows to avoid all these details, so both the main and the library files contain the original code, and just 2 lines needs to be added to the main file. The method consist in switch the context of the running main Batch file to the library file; after that, all functions in the library file are available to the running code. The way to do that is renaming the library file with the same name of the main file. After that, when a call :function command is executed, the :function label will be search in the library file! Of course, the files must be renamed back to the original names before the program ends. Ah! I almost forget the key point of this method: both the initial and final renames must be executed in a code block in the main file. A simple example:

    main.bat

    @echo off
    echo Calling :test and :hello functions in the library.bat file:
    
    rem Switch the context to the library file
    (ren "%~NX0" temp.bat  &  ren library.bat "%~NX0"
    
    call :test
    echo Back from library.bat :test function
    
    call :hello
    echo Back from library.bat :hello function
    
    rem Switch the context back to the main file
    ren "%~NX0" library.bat  &  ren temp.bat "%~NX0")
    
    echo Continue in main file
    

    library.bat

    :test
    echo I am :test function in library.bat file
    exit /B
    
    :hello
    echo I am :hello function in library.bat file
    exit /B
    

    A drawback of this method is that if a run-time error happens when the files are renamed, the files remains renamed, but this may be fixed in a very simple way. For example, a check.bat file may check if the library.bat file exists, and do the rename back if it was not found.

提交回复
热议问题