标题: 在bat1中call另外一个bat2, 如何把bat2中的变量值返回给bat1 [打印本页]
作者: feihuang 时间: 2013-12-30 10:29 标题: 在bat1中call另外一个bat2, 如何把bat2中的变量值返回给bat1
bat1
@echo off
call bat2.bat
echo %b2% --------请教高人如何在bat1中调用到bat2中的b2
bat2
@echo off
set b2=abcd bacsd
echo %b2% -------------b2如何返回给bat1中
pause
作者: Kuriko 时间: 2013-12-30 16:46
只有一个返回值的话可以用exit /b [code]然后用%errorlevel%检测?不过只支持数字...
作者: feihuang 时间: 2013-12-31 13:42
如果是返回字符串纳?
作者: binghejin 时间: 2013-12-31 14:54
对这个我也很头疼,一直没有解决,最后我用的是迂回的方法,
把bat2中的字符串写到一个临时文件里,然后bat1中再读取出来作为一个变量使用,然后删除临时文件。
作者: sarino 时间: 2013-12-31 16:33
不用返回,只要不开delayedexpantion直接就已经赋值给b2了
作者: feihuang 时间: 2013-12-31 16:33
是个法子,坐等高人,有没有比较直接的方法
作者: DAIC 时间: 2013-12-31 17:28
bat1.bat- @echo off
- for /f "delims=" %%i in ('call bat2.bat') do (
- set "b2=%%i"
- )
- echo %b2%
- pause
复制代码
bat2.bat- @echo off
- set b2=abcd bacsd
- echo %b2%
复制代码
作者: feihuang 时间: 2013-12-31 22:38
回复 7# DAIC
谢谢, 我试过这样是可以的
作者: feihuang 时间: 2013-12-31 22:43
回复 7# DAIC
问下, call 能否返回字符串?
作者: PowerShell 时间: 2013-12-31 23:28
for /f "delims=" %%i in ('call bat2.bat') do (
---------------- 通过上面这句我们看出,这是bat语言设计的缺陷,这是没有return 关键字的悲哀。
随着高级语言的发展,
有了函数,弃了goto
有了函数,必须有return xxx,yyy,zzz
鉴定此语法:不简单,不直观,不被菜鸟会,
再此我劝诸位牛人和菜鸟,
【应逐渐弃了bat这破铜烂铁,专磨powershelllllllll 这把屠龙!!!】
作者: terse 时间: 2013-12-31 23:40
这个意思?- call "1.cmd" "b2"
- echo %b2%
复制代码
复制代码
作者: DAIC 时间: 2014-1-1 11:24
回复 9# feihuang
你顶楼的那种想法是不行的
作者: DAIC 时间: 2014-1-1 11:24
你可以考虑一下11楼的做法是否符合你的需求
作者: feihuang 时间: 2014-1-6 10:34
回复 11# terse
call时传入参数b2, 为什么在第二段代码中给参数b2(%1)赋值之后, 在第一段代码中能知道b2的值被改变了? 这个是什么样的原理?
作者: feihuang 时间: 2014-1-6 10:35
回复 13# DAIC
恩,我也看到过类似的方法,只是不太理解
作者: DAIC 时间: 2014-1-6 10:47
回复 15# feihuang
哪里不理解可以直接问
作者: feihuang 时间: 2014-1-7 13:37
call时传入参数b2, 为什么在第二段代码中给参数b2(%1)赋值之后, 在第一段代码中能知道b2的值被改变了? 这个是什么样的原理?
是因为bat中自上而下的运行机制, 是b2改变的值存到内存中了么?
因为在高级语言里面,有返回值可以显示的返回, 而这里面没有返回
谢谢!
作者: DAIC 时间: 2014-1-7 14:45
回复 17# feihuang
因为bat1和bat2在同一个cmd.exe进程里面
作者: feihuang 时间: 2014-1-7 14:52
回复 18# DAIC
例如开头的时候,我的示例中, 应该也是在一个cmd中, 那在bat1中call bat2.bat之后,直接调用b2是可以的了? (PS:我试过b2确实是改变了。)
bat1
@echo off
call bat2.bat
echo %b2% --------请教高人如何在bat1中调用到bat2中的b2
bat2
@echo off
set b2=abcd bacsd
echo %b2% -------------b2如何返回给bat1中
pause
作者: DAIC 时间: 2014-1-7 16:03
回复 19# feihuang
是的。
作者: feihuang 时间: 2014-1-7 16:17
回复 20# DAIC
明白了,多谢!
作者: wscript 时间: 2014-1-7 18:33
回复 17# feihuang
高级语言里面不是有全局变量吗?bat是类似的道理
作者: feihuang 时间: 2014-1-8 10:13
回复 22# wscript
恩, 是的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |