2015-08-28 77 views
0

我正在创建将解析语句并返回结果的通用脚本。我已经完成了shell,但不知道在批处理脚本中如何发生这种情况。批处理脚本将结果返回到变量

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

SET Myresult=CALL child.bat "Statement" 

现在Myresult应该存储答案,无论我想在这个变量中返回什么。

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

所以是他们重返象Java 回报XYZ

XYZ获取其他地方调用语句捕获的值的方式。

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

PART 2

下面是我正在做的细节。

所谓孩子的脚本是getSQLResult.bat

什么是确实是

getSQLResult.bat -q "Select a from abc" 

现在这上面的调用语句可以被任何人用于任何批处理脚本任何如何。

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

回答

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地址在他对您的问题的评论中。也许使用多行输出将文件名返回到文件可能是另一种解决方案。

0

选项1 - 通过变量名

为主。蝙蝠

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)由您或他人重复使用,您在这个元素和其他代码之间创建一个接口,一组预期的输入参数和一种返回信息的方式。你的问题

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

由此界面的文档回答。

+0

Thnks MC ND,但我的问题有点不同。请检查编辑的问题part2 – jjames

+0

@jjames,我已经改变了修改。语句执行将从'0'到'n'输出行产生。环境变量内容限制为8191个字符。将结果存储到变量中的选项不安全/强大/方便。最好的选择是将语句执行从child发送到stdout,并在父级使用'for/f'来处理输出。 –

相关问题