我正在创建一个通用脚本,它将解析一个语句并返回结果。我在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循环来解析结果集之外,还有任何简单直接的方法。
答案 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
在他对你的问题的评论中发表了讲话。也许将文件名返回到具有多行输出的文件可能是另一种解决方案。