批处理脚本将结果返回到变量

时间:2015-08-28 06:13:05

标签: windows batch-file cmd

我正在创建一个通用脚本,它将解析一个语句并返回结果。我在shell中这样做了,但不知道批处理脚本中会发生这种情况

脚本1主脚本(main.bat)。

SET Myresult=CALL child.bat "Statement"

现在Myresult应该存储我希望在此变量中返回的答案。

解决方案1:在Child.bat中设置Myresult并在main.bat中使用它,但现在如果用户不知道变量名是什么,该怎么办呢。

他们是一种返回java中的值的方法 返回xyz

xyz在其他地方的调用语句中被捕获。

------------------------------- xxxxxxxxxxxxxxxxxxxxxxx -----------

第2部分

以下是我正在做的细节。

所谓的子脚本是getSQLResult.bat

做什么是

getSQLResult.bat -q "Select a from abc" 

现在任何批处理脚本中的任何人都可以使用上面的调用语句。

除了传递一个variablename(返回名称)或编写一个for循环来解析结果集之外,还有任何简单直接的方法。

2 个答案:

答案 0 :(得分:1)

选项1 - 传递变量名称

main.bat

call child.bat myresult "Statement"
echo %myresult%

child.bat

set "%~1=argument was %~2"

选项2 - 子流程的处理输出

main.bat

for /f "delims=" %%a in ('child.bat "Statement"') do set "myresult=%%a"
echo %myresult%

child.bat

@echo off
echo Argument was %~1

或者您可以使用临时文件,注册表,剪贴板......来传递信息,但无论如何,如果您正在编码元素(您的child.bat)以供您或其他人重复使用,您将在此元素与其余代码之间创建一个接口,一组预期的输入参数和一种返回信息的方法。你的问题

  

...如果用户不知道变量名称是什么,该怎么办?

由该界面的文档回答。

答案 1 :(得分:0)

这是批处理的方法:

for /f "delims=" %%a in ('echo hello world') do set myresult=%%a
echo it returned: %myresult%

echo hello world只是一个例子)

注意:这将仅返回最后一行(或仅)。它可以被修改为处理更多行,但是你的例子暗示,只有一行输出)

编辑如果我理解您的编辑正确,您只想将一个语句传递给外部批处理文件,该文件执行工作并将结果返回给变量,该变量由调用定义。

REM child.bat
@echo off
set var=%1
for /f "tokens=1,*" %%i in ("%*") do (
  set var=%%i
  set statement="%%~j"
)
for /f "delims=" %%a in ('getSQLResult.bat -q  %statement%') do set "%var%=%%a"

使用它:

call child.bat result "Select a from abc"
echo %result%

当然它仍然会返回最后一行(或唯一一行)。可以轻松修改以获得第一行。如果输出可能是更多行,我建议使用"数组"有一个柜台可以避免这些问题,MC ND在他对你的问题的评论中发表了讲话。也许将文件名返回到具有多行输出的文件可能是另一种解决方案。