Batch file call sub-batch file to pass n paramenters and return without use of file

后端 未结 3 1191
死守一世寂寞
死守一世寂寞 2020-12-13 09:29

I looking for a way using windows batch file that call sub-batch file which pass 1-9 parameters and return value (string) without the need of saving the return value into fi

3条回答
  •  爱一瞬间的悲伤
    2020-12-13 10:16

    Generally batch functions return values in one of two ways:

    1) A single integer value can be returned via the errorlevel by using EXIT /B n where n = some number.

    @echo off
    setlocal
    call :sum 1 2
    echo the answer is %errorlevel%
    exit /b
    
    :sum
    setlocal
    set /a "rtn=%1 + %2"
    exit /b %rtn%
    

    2) The more flexible method is to use environment variables to return one or more values

    @echo off
    setlocal
    call :test 1 2
    echo The sum %sum% is %type%
    call :test 1 3
    echo The sum %sum% is %type%
    exit /b
    
    :test
    set /a "sum=%1 + %2, type=sum %% 2"
    if %type%==0 (set "type=even") else (set "type=odd")
    exit /b
    

    The name of the variable where the answer is to be stored can be passed in as a parameter! And the intermediate values can be hidden from the main program.

    @echo off
    setlocal
    call :test 1 2 sum1 type1
    call :test 1 3 sum2 type2
    echo 1st sum %sum1% is %type1%
    echo 2nd sum %sum2% is %type2%
    exit /b
    
    :test
    setlocal
    set /a "sum=%1 + %2, type=sum %% 2"
    if %type%==0 (set "type=even") else (set "type=odd")
    ( endlocal
      set "%3=%sum%"
      set "%4=%type%"
    )
    exit /b
    

    For a complete explanation of how the last example works, read this excellent batch function tutorial at DOStips.

    Update

    The above still has limits as to the content that can be returned. See https://stackoverflow.com/a/8254331/1012053 for an alternative method based on FOR that supports a wider range of values. And see https://stackoverflow.com/a/8257951/1012053 for a "magical" technique that can safely return absolutely any value with length < ~8190, under any circumstance.

提交回复
热议问题