找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24293|回复: 5

[系统相关] [已解决]批处理命令被跳过,没有执行?

[复制链接]
发表于 2015-7-2 15:33:46 | 显示全部楼层 |阅读模式
  1. @echo off
  2. sc stop LazyStopService
  3.         ping -n 12 127.0.0.1 >nul 2>nul
  4. for /f %%a in ('wmic SERVICE where name^="LazyStopService" get ProcessId^|findstr "[0-9]"') do (
  5.                 tasklist /fi "pid eq %%a" |find "%%a" 2>nul
  6.                 if %errorlevel% == 0 (
  7.                         echo one error
  8.                         sc stop LazyStopService
  9.                         ping -n 12 127.0.0.1 >nul 2>nul
  10.                         tasklist /fi "pid eq %%a" |find "%%a" 2>nul
  11.                         if %errorlevel% == 0 (
  12.                                 echo two error
  13.                                 sc stop LazyStopService
  14.                                 ping -n 10 127.0.0.1 >nul 2>nul
  15.                                 tasklist /fi "pid eq %%a" |find "%%a" 2>nul
  16.                                 if %errorlevel% == 0 (
  17.                                         echo three error
  18.                                         taskkill /F /PID %%a
  19.                                 )
  20.                         )
  21.                 )
  22.         )
  23. echo haha
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2015-7-2 15:35:30 | 显示全部楼层
LazyStopService这个服务是我特意为测试代码写的一个延时20秒停止的一个服务

根据执行结果看 第10行代码完全没有执行啊      这是什么原因
发表于 2015-7-2 16:40:21 | 显示全部楼层
把以下代码删掉:
@echo off
2>nul

再执行一次,结果发出来看看。
发表于 2015-7-2 16:45:22 | 显示全部楼层
本帖最后由 flyinnet9 于 2015-7-2 16:47 编辑

2,7,12,17行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. sc stop LazyStopService
  4.         ping -n 12 127.0.0.1 >nul 2>nul
  5. for /f %%a in ('wmic SERVICE where name^="LazyStopService" get ProcessId^|findstr "[0-9]"') do (
  6.                 tasklist /fi "pid eq %%a" |find "%%a" 2>nul
  7.                 if !errorlevel!== 0 (
  8.                         echo one error
  9.                         sc stop LazyStopService
  10.                         ping -n 12 127.0.0.1 >nul 2>nul
  11.                         tasklist /fi "pid eq %%a" |find "%%a" 2>nul
  12.                         if !errorlevel! == 0 (
  13.                                 echo two error
  14.                                 sc stop LazyStopService
  15.                                 ping -n 10 127.0.0.1 >nul 2>nul
  16.                                 tasklist /fi "pid eq %%a" |find "%%a" 2>nul
  17.                                 if !errorlevel! == 0 (
  18.                                         echo three error
  19.                                         taskkill /F /PID %%a
  20.                                 )
  21.                         )
  22.                 )
  23.         )
  24. echo haha
复制代码
这样应该就可以了,不过System Idle Process服务的PID貌似是0,wmic取PID的时候,如果服务未启动,返回也是0,最好判断一下

评分

参与人数 1技术 +1 收起 理由
zhaokeistc + 1 十分感谢

查看全部评分

 楼主| 发表于 2015-7-2 17:19:02 | 显示全部楼层
回复 4# flyinnet9


    确实可以了    不过那个echo madan  我没去掉还是直接跳到echo haha了     echo是不占输出的!errorlevel!判断吗?      不应该是进入if才对吗
发表于 2015-7-2 17:37:48 | 显示全部楼层
!相对于%是起到变量延迟的作用,所以在前面加setlocal enabledelayedexpansion启用延迟,不启用,errorlevel只会取第一次的值,后面的判断是无效的

我眼神不好,实在是没有发现 echo madan在哪一行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 00:02 , Processed in 0.019684 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表