gpt4 book ai didi

batch-file - 批处理文件调用子批处理文件传递n个参数并返回,不使用文件

转载 作者:行者123 更新时间:2023-12-03 06:58:55 24 4
gpt4 key购买 nike

我正在寻找一种使用Windows批处理文件调用子批处理文件的方法,该子批处理文件传递1-9个参数和返回值(字符串),而不需要将返回值保存到文件/等中。我将返回值保存到变量中,就像 @FOR/F

中所做的那样

我看看

@FOR /F "tokens=*" %%i IN ('%find_OS_version%') DO SET OS_VER=%%i

Call function/batch %arg1% %arg2%

我不知道如何设置来执行此操作

编辑:dbenham 在某种程度上回答了我的问题。他的例子是批处理文件的主要部分和函数之间。我的问题是在两个不同的批处理文件之间。根据 dbenham 的回答,这是以下布局。

主批处理文件

CALL sub_batch_file.bat  return_here "Second parameter input"

REM echo is Second parameter input
ECHO %return_here%
REM End of main-batch file

sub_batch_file.bat

@ECHO OFF
SETLOCAL

REM ~ removes the " "
SET input=%~2
(
ENDLOCAL
SET %1=%input%
)
exit /b
REM End of sub-batch file

最佳答案

通常批处理函数以两种方式之一返回值:

1) 可以使用 EXIT/B n 通过错误级别返回单个整数值,其中 n = 某个数字。

@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)更灵活的方法是使用环境变量返回一个或多个值

@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

可以将要存储答案的变量名称作为参数传入!并且中间值可以对主程序隐藏。

@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

有关最后一个示例如何工作的完整说明,请阅读这篇优秀的 batch function tutorial在 DOStips。

更新

以上对于可返回的内容仍然有限制。请参阅https://stackoverflow.com/a/8254331/1012053了解基于 FOR 的替代方法,支持更广泛的值。并参见 https://stackoverflow.com/a/8257951/1012053一种“神奇”的技术,在任何情况下都可以安全地返回长度<~8190的任何值。

关于batch-file - 批处理文件调用子批处理文件传递n个参数并返回,不使用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11481150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com