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

[系统相关] BAT批处理如何判断计划任务是否存在?

[复制链接]
发表于 2014-3-17 03:40:47 | 显示全部楼层 |阅读模式
如题,如何判断计划任务是否存在?比如:存在或不存在分别返回一个数值或符号,以便后续计算。
 楼主| 发表于 2014-3-18 21:09:29 | 显示全部楼层
难道没人知道?
顶一下。
发表于 2014-3-18 22:41:33 | 显示全部楼层
  1. schtasks /query
复制代码
 楼主| 发表于 2014-3-19 02:46:16 | 显示全部楼层
回复 3# DAIC

这个只能查询,但不能告诉代码结果(存在or不存在),我要根据结果执行不同操作。
发表于 2014-3-19 08:20:13 | 显示全部楼层
回复 4# jwt2014


你在有计划任务和没有计划任务的情况下,分别执行那个命令,把结果记录下来,看看有什么不同。根据这个结果来判断就行了。

条件判断的语法在这里:
http://bbs.bathome.net/thread-2530-1-1.html
 楼主| 发表于 2014-3-20 01:18:46 | 显示全部楼层
本帖最后由 jwt2014 于 2014-3-20 01:20 编辑

回复 5# DAIC

最终还是想出了一个变通的方法:
将query结果输出到文本文件(1.txt),再用findstr判断1.txt里有没有需要的计划任务名称,如果有就会生成一个含有指定文件名的文件2.txt。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. chcp 437
  4. schtasks /query /tn ABC >1.txt
  5.         findstr /m "ABC" 1.txt >2.txt
  6.         for /f  "tokens=1,*" %%a in (2.txt) do (               
  7.                 if "%%a"=="1.txt" (
  8.                         schtasks /delete /tn ABC /f
  9.                 )
  10.         )


  11. pause
复制代码
这里发现一个有趣的现象,在中文状态下不能使用schtasks /query /tn ABC,在英文状态下则可以输出查询结果。不知何故。
发表于 2014-3-20 08:24:31 | 显示全部楼层
回复 6# jwt2014


反正都要删除,干脆别判断了,直接删:
  1. schtasks /delete /tn ABC /f 2>nul
复制代码
 楼主| 发表于 2014-3-20 15:18:41 | 显示全部楼层
回复 7# DAIC
没错。想过这么干,还简单的多。但考虑批处理貌似几乎没有命令会返回不同的结果值,所以想找一个方法,便于以后应用。
前面是通过文件传递的方式进行,有没有可能直接将结果传给变量呢?
 楼主| 发表于 2014-3-20 15:25:50 | 显示全部楼层
找到方法了,贴出来和大家共享。

http://www.netingcn.com/bat-command-to-variable.html

在批处理中,如果需要把一个命令的处理结果赋值给一个变量,可以使用如下方法:

for /f "delims=" %%t in ('命令字符串') do set str=%%t
echo %str%
当命令字符串中含有%时,需要转义。使用imagemagick中的identify命令获取图片的宽和高:

identify -format %wx%h demo.jpg
直接在命令行中使用上述命令可以看到输出了图片的高和宽,但是用它放在批处理脚本中来获取命令的输出结果,则失败,原因是命令字符串中含有%符号,它在批处理有特殊含义,所有需要转义,转义的方法是使用两个%%,正确的做法是:

for /f "delims=" %%t in ('identify -format %%wx%%h demo.jpg') set str=%%t
发表于 2014-3-20 16:07:00 | 显示全部楼层
回复 9# jwt2014


其实不用到处搜索,好好学习这两个帖子就行了:
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html
发表于 2014-3-20 19:18:53 | 显示全部楼层
  1. set var=0
  2. schtasks /query /tn ABC |findstr /m "ABC" &&set var=1
  3. if %var%==1 schtasks /delete /tn ABC /f
复制代码
没有测试过!思路是这样的。
发表于 2021-7-5 08:05:21 | 显示全部楼层
根据11楼的修改,11楼的第3条指令没有管理员权限任务是不给删的;据标题可知只需要判断就行了

  1. set var=0
  2. ::读取任务计划中的ABC任务,如果有就显示,如果没有就报错
  3. schtasks /query /tn ABC |findstr /m "ABC" &&set var=1
  4. ::检查上一条指令是否产生与ABC有关的信息,如果没有就执行X;如过有就执行Y
  5. if ERRORLEVEL 1 (X)else (Y)
  6. pause
复制代码
发表于 2021-7-5 08:05:26 | 显示全部楼层
根据11楼的修改,11楼的第3条指令没有管理员权限任务是不给删的;据标题可知只需要判断就行了

  1. set var=0
  2. ::读取任务计划中的ABC任务,如果有就显示,如果没有就报错
  3. schtasks /query /tn ABC |findstr /m "ABC" &&set var=1
  4. ::检查上一条指令是否产生与ABC有关的信息,如果没有就执行X;如过有就执行Y
  5. if ERRORLEVEL 1 (X)else (Y)
  6. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 19:14 , Processed in 0.033607 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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