无忧启动论坛

标题: 求一个批处理命令 [打印本页]

作者: 有阴也有阳    时间: 2017-12-13 18:44
标题: 求一个批处理命令
本帖最后由 有阴也有阳 于 2017-12-14 10:02 编辑

        求一个“一条批处理命令执行完后,如果执行成功就停止,不成功就继续执行下一条批处理命令”的批处理命令,

        例如:

        这条批处理命令:

cscript.exe "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus

        它执行完后,如果成功,就停下来,不再执行下面的批处理命令,假如不成功,就继续执行下面的批处理命令的批处理命令该如何写?

                                                                                                                                                                    谢谢!!!

        哈哈......,成功了,我是在用枚举法编写一个检查Office是否激活的批处理命令,要求当其中的一条批处理命令执行失败时就接着执行下一条命

令,如果成功就停止,并且要保持CMD窗口打开的状态,在命令后面加了一个&& pause命令:

cscript.exe "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus && pause

cscript.exe "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" /dstatus && pause

cscript.exe "C:\Microsoft Office\Office16\OSPP.VBS" /dstatus && pause

cscript.exe "D:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus && pause

cscript.exe "D:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" /dstatus && pause

cscript.exe "D:\Microsoft Office\Office16\OSPP.VBS" /dstatus && pause

......

        下面是效果图——执行到第4条命令:“cscript.exe "D:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus && pause

时批处理命令执行成功,就停了下来,不再执行后面的命令,并且保持CMD窗口打开的状态:




        感谢诸位网友的热心帮助,谢谢!!!

        特别鸣谢nttwqz网友,谢谢!!!





作者: tools241    时间: 2017-12-13 19:13
本帖最后由 tools241 于 2017-12-13 19:15 编辑

cscript.exe "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus
if  "%errorlevel%"=="0" goto end
...
...
...

:end


或试:
cscript.exe "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus
if  not "%errorlevel%"=="1" goto end
...
...
...

:end
作者: slore    时间: 2017-12-13 19:14
  1. if /? | findstr ERRORLEVEL
复制代码

作者: slore    时间: 2017-12-13 19:14
  1. &&
复制代码

作者: nttwqz    时间: 2017-12-13 19:44
..... && exit
作者: nttwqz    时间: 2017-12-13 20:26
slore 发表于 2017-12-13 19:14

可是,楼主说的是“成功了停止,失败了继续”
作者: kingshui    时间: 2017-12-13 20:46
本帖最后由 kingshui 于 2017-12-13 20:48 编辑

用&& 和||处理。。。

[code]cscript.exe "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus && goto eof || goto next
作者: holley2008    时间: 2017-12-14 15:30
不用整这么多,把Program Files换成环境变量
作者: 有阴也有阳    时间: 2017-12-14 15:54
holley2008 发表于 2017-12-14 15:30
不用整这么多,把Program Files换成环境变量

你是说从A——Z,搜索Program Files文件夹?
作者: holley2008    时间: 2017-12-15 10:23
有阴也有阳 发表于 2017-12-14 15:54
你是说从A——Z,搜索Program Files文件夹?

Program Files 对应 %ProgramFiles%
Program Files(x86)对应%ProgramFiles(x86)%
批处理判断平台并运行对应脚本即可
另office的版本不同,路径也不一致,可以将office(x)目录的x设置成变量,来打造通用脚本。

作者: holley2008    时间: 2017-12-15 10:23
有阴也有阳 发表于 2017-12-14 15:54
你是说从A——Z,搜索Program Files文件夹?

Program Files 对应 %ProgramFiles%
Program Files(x86)对应%ProgramFiles(x86)%
批处理判断平台并运行对应脚本即可
另office的版本不同,路径也不一致,可以将office(x)目录的x设置成变量,来打造通用脚本。

作者: holley2008    时间: 2017-12-15 11:28
holley2008 发表于 2017-12-15 10:23
Program Files 对应 %ProgramFiles%
Program Files(x86)对应%ProgramFiles(x86)%
批处理判断平台并运行 ...

看到你说搜索,我想了下,直接搜索文件路径再看状态也有效!
  1. @echo off
  2. set "strname=OSPP.VBS"
  3. echo. =======================================
  4. echo. 正在查询office激活状态,请稍候......
  5. echo. =======================================
  6. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  7.   if exist %%a:\ (
  8.     pushd %%a:\
  9.     for /r %%b in (*%strname%) do (
  10.       if /i "%%~nxb" equ "%strname%" (
  11.         cscript.exe "%%b" /dstatus
  12.       )
  13.     )
  14.     popd
  15.   )
  16. )
复制代码

作者: kingshui    时间: 2017-12-16 12:37
用ftype查出office的正确目录再做激活更快些吧?
作者: 有阴也有阳    时间: 2017-12-16 15:00
本帖最后由 有阴也有阳 于 2017-12-16 15:34 编辑
holley2008 发表于 2017-12-15 11:28
看到你说搜索,我想了下,直接搜索文件路径再看状态也有效!


        谢谢!!!亲测可用!!!

        此批处理写得简单、明了,直指关键、要害!写得好!!!

        但检测完后会出现三个相同的检测结果,都是同一个Office的,第一、第三个是英文的,第二个是中文的,不知是什么原因:







        对了,这个批处理在执行完后CMD的窗口会自动关闭,让人看不清检测结果,我在其最后添加了一个pause命令,就能保持CMD窗口打开了:

@echo off
set "strname=OSPP.VBS"
echo. =======================================
echo. 正在查询office激活状态,请稍候......
echo. =======================================
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  if exist %%a:\ (
    pushd %%a:\
    for /r %%b in (*%strname%) do (
      if /i "%%~nxb" equ "%strname%" (
        cscript.exe "%%b" /dstatus
      )
    )
    popd
  )
)
pause



作者: nttwqz    时间: 2017-12-17 22:23
kingshui 发表于 2017-12-16 12:37
用ftype查出office的正确目录再做激活更快些吧?

没想到还有这一招……!
作者: kingshui    时间: 2017-12-18 17:59
nttwqz 发表于 2017-12-17 22:23
没想到还有这一招……!

我也是去年要查java版本的时候想到的这个法子
作者: 2011jiangli463    时间: 2017-12-19 15:07
批处理有大用处啊!




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3