日期:2014-05-17  浏览次数:20780 次

关于.bat批处理的问题。菜鸟再次求救!
首先先说一下需求。
  公司要求我写一个脚本,脚本的开头是检测系统是否安装了7z,并且设置了环境变量(脚本后面会用到7z进行解压)。

现在的问题是这样,如果用.bat脚本获取环境变量的去判断是否设置了7z的话。万一7z的安装路径为:"c:/8-zip",或者其他的名字,那环境变量肯定就不包含7-zip这些关键字。所以这个不妥。

我的思路是这样,写一个bat脚本

call 7z (如果未设置环境变量,就会提示'7z'不是内部或外部命令.....)

然后它会继续往下面的脚本执行下去。下面要用的7z的脚本就悲催了。。。

如果判断注册表是否安装了7z的话,又怕安装是安装了。但环境变量没有设置。悲催。很纠结,公司要求,木有办法!我是搞java的,非让我写脚本...

判断注册表也有个问题,万一我用的7z是从别的机拷过来直接用的,注册表肯定是没信息的...就算环境变量里有,也未必叫7-zip,烦死了


有没有高手可以加一个判断(本人刚学bat两天,菜鸟)

if call 7z 如果调用7z命令错误就停止往下执行,并且给出提示

Thank you!


------解决方案--------------------
call 7z
if %errorlevel%==0 (echo 找到了) else echo 没找到
------解决方案--------------------
探讨
引用:
call 7z
if %errorlevel%==0 (echo 找到了) else echo 没找到


提示是有了,但脚本依然会往下执行!这样肯定不行了!

------解决方案--------------------
这个批处理的结构最好是像楼上那样使用goto了...
事实上虽然goto类语句在编程中被严格限制使用,但在批处理中却太常用了...
------解决方案--------------------
BatchFile code
@echo off
call 7z
if %errorlevel% neq 0 (
    goto :end
)
echo hello world

:end