@ECHO OFF
SETLOCAL
for %%i in (var return1 return2 bat1err) do set "%%i="
FOR /f %%i IN ('call first') DO SET var=%%i
FOR /f "tokens=1,2" %%i IN ("%var%") DO set return1=%%i&set return2=%%j
应该建立RETURN1和RETURN2你的两个值,而是由FIRST.bat
产生的ERRORLEVEL
价值不能被检索。
在您的原始代码中,文件t
将在任何情况下生成 - 并且如果first.bat
没有输出将为零。我很困惑你的行动只删除t
如果没有错误发生....
所以 - 我们真的需要做的是改变FIRST.bat
一点。
如果first.bat
不使用SETLOCAL,然后
set bat1err=%errorlevel%
在适当的点会bat1err
集返回错误级别。
如果first.bat
确实使用SETLOCAL,那么生活变得在适当的点会设置bat1err
以同样的方式有点复杂,
set bat1err=%errorlevel%
,但你需要使用
ENDLOCAL&set bat1err=%bat1err%
退出前。这是一个解析技巧,可以先解析该行,然后执行。什么情况是,该行作为
endlocal&set bat1err=22
或任何实际执行,调用,而不是所谓的间歇的范围内设定BAT1ERR
。
另一种方法是,包括%errorlevel%
在你的输出,并简单分析改为
FOR /f "tokens=1,2,3" %%i IN ("%var%") DO set bat1err=%%i&return1=%%j&set return2=%%k
,或者根据相当的first.bat
输出,你可以做到这一点第三种方式是什么:
如果first.bat
不产生任何输出错误,但成功输出的线,
FOR /f %%i IN ('call first') DO SET var=%%i
if defined var (
FOR /f "tokens=1,2" %%i IN ("%var%") DO set return1=%%i&set return2=%%j
) else (echo Error occurred)
,并再次可以用IF DEFINED
分析,return2
和var
作出决定。
这真的取决于我们没有的信息。
您可以为保留值设置一些环境变量。我没有看到很多选择。 – 2013-04-23 10:36:15