bat取前一行命令是不是有返回值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bat取前一行命令是不是有返回值相关的知识,希望对你有一定的参考价值。
bat取前一行命令是否有返回值我cmd调用gcc编译 后面有一句运行编译出来的exe 如果gcc无错误编译一句话都不返回 就会打印信息运行程序 直接运行 但是如果有错误 还是会继续下去 有什么办法 取上一行 没有返回值就执行下一行命令 有返回值就直接结束
比如前一命令执行逗成功的返回值为0,执行失败的返回值是1,只有前一命令执行成功,后面的命令才执行,前一命令执行失败,退出程序的代码如下:if %errorlevel%==0 goto next
if %errorlevel%==1 goto exit
:next
echo 这里写你要执行的命令
:exit
exit
希望能帮到你,望采纳,谢谢!追问
谢谢大佬
参考技术A i Hospital, said a sur在批处理中调用VBScript(支持获取返回值)
有个帖子简单介绍了利用mshta来调用vbs的方法(链接)。虽该文章作者认为
到此,在bat中使用vbs得到了完全解决。从此可以在bat和vbs间自由的航行了。
但任然无法获取vbs的返回值,可见该方法有一定缺陷。
于是写出该帖子来补充一下下~
先不看这个缺陷,原调用代码的html标签也可以不要(lz最早是看见zhonghua兄使用该方法)
Mshta Vbscript:VBS命令(Close)
感谢zhonghua,我们来看几个例子:
Mshta Vbscript:Msgbox("Hello,world!")(Close)
Mshta Vbscript:CreateObject("SApi.SpVoice").Speak("Hello,world!"&vbNewLine&"你好,世界!")(Close)
Mshta Vbscript:Msgbox("该电脑的设备和驱动器共有"&CStr(CreateObject("Scripting.FileSystemObject").Drives.Count)&"个。")(Close)
注意几点:
1、在例1中,Msgbox语句与后面的(Close)之间无需加任何符号,添加:还会报错。
2、在例2中,虽然SApi.SpVoice函数的.Speak方法严格来说是一个过程,但是因为Mshta接收的参数有限以及其他各种原因,必须用括号包裹而不是空格分隔。
再看一段代码:
@echo off
Setlocal enabledelayedexpansion
::CODER BY 老刘 POWERD BY iBAT
Mshta Vbscript:Msgbox("Hello,world!",1)(Close)
Echo %Errorlevel%
pause
测试者会发现无论点击哪个按钮,返回值都是0。
可能这个例子举得有些牵强,即使有返回值也不一定要从%Errorlevel%来返回是吧~
但是这是批处理获取其他Console程序的结果的方法之一。
既然这种方法不行,那我们为什么不试试另一种方法呢?
我们经常能看到批处理使用For/f+(‘Commands‘)的方法获取程序输出。
那么能否使用这种方法获取VBS代码运行后的返回值呢?
答案是肯定的,首先感谢PCL_Test斑竹。
来看我封装好的代码块:
Set Vbscript=VBS命令
for /f "Delims=" %%a in (
‘MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(close^)‘
) do Set "MsHtaReturnValue=%%a"
Set MsHtaReturnValue
该方法lz最初看到pcl斑竹使用,就拿来封装了下。
使用这种方法就可以获取Vbs代码运行的返回值了~
来修改刚才的例子:
@echo off
Setlocal enabledelayedexpansion
::CODER BY 老刘 POWERD BY iBAT
Set Vbscript=Msgbox("Hello,world!",1)
for /f "Delims=" %%a in (
‘MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(Close^)‘
) do Set "MsHtaReturnValue=%%a"
Set ReturnValue1=确定
Set ReturnValue2=取消或关闭窗口
Echo 你点击了!ReturnValue%MsHtaReturnValue%!。
pause
这样就可以正常运行了,鸡冻吧~
但是这样还有一个缺陷,Mshta运行时当前窗口会失去焦点(即当前窗口变灰),
当Mshta运行完毕后,窗口焦点又会恢复。
所以调用次数少或者脚本运行环境的电脑无鼠标操作的时候,可以放心使用该方法获得返回值。
但是如果要大量调用,还需要顺便干干其他什么事情的话,还是单独写一个Vbs调用较好。
以上是关于bat取前一行命令是不是有返回值的主要内容,如果未能解决你的问题,请参考以下文章
bat脚本获取 exe返回值 ErrorLevel 的参数和设定