Board logo

标题: 批处理怎样用计划任务定时执行文件? [打印本页]

作者: er8852973    时间: 2011-8-8 15:41     标题: 批处理怎样用计划任务定时执行文件?

  1. set /p t=
  2. for /l %%I in (1 1 4) do (
  3. set b=%t:~-2%
  4. set /a f=%b%+1
  5. set s=%t:~0,2%
  6. set t=%s%:%f%
  7. call :a
  8. )
  9. :a
  10. at %t% /interactive   "C:\Program Files\TTPlayer\TTPlayer.exe"
复制代码
请问我这个代码有什么不对的地方吗 怎么不能正常执行呢
作者: wc726842270    时间: 2011-8-8 22:04

LZ如果对此感兴趣的话可以学一下SCHTASKS命令
作者: Hello123World    时间: 2011-8-10 20:16

  1. @echo off
  2. echo 时间格式:23:09
  3. set /p t=请输入时间:
  4. at %t% /interactive   "C:\Program Files\TTPlayer\TTPlayer.exe"
  5. ::一个本来人很容易看懂的功能,被写成一个连鬼都看不懂的代码
  6. pause>nul
复制代码

作者: er8852973    时间: 2011-8-11 07:59

3L  看来你还是没看明白啊 我要实现的功能是间隔一定时间 就定时执行特定功能  你怎么把时间就锁定在23:09了啊 ? 对了 at命令后面不是有/interactive这个吗 ? 这个我知道 但有时在其后面还有cmd.exe 是否可省略 其意义何在 请教
作者: hanyeguxing    时间: 2011-8-11 08:16

1,任务计划推荐从控制面板的“任务计划”中直接创建。
2,如果想用命令完成,推荐使用 Schtasks 。
推荐从图形界面创建,因为 at 过于简单,而 Schtasks 不支持“仅在登陆后运行”,即跳过帐户密码设置一问题...同时,图形界面的“任务计划”更加强大。
作者: er8852973    时间: 2011-8-11 08:38

我就想问我的代码是什么原因不能顺利执行 请教诸位
作者: canyuexiaolang    时间: 2011-8-11 10:12

我不知道楼主想干嘛
C:\Documents and Settings\Administrator\桌面>echo on

C:\Documents and Settings\Administrator\桌面>set /p t=
11:50

C:\Documents and Settings\Administrator\桌面>for /L %I in (1 1 4) do (
set b=50
set /a f=+1
set s=11
set t=:
call :a
)

C:\Documents and Settings\Administrator\桌面>(
set b=50
set /a f=+1
set s=11
set t=:
call :a
)

C:\Documents and Settings\Administrator\桌面>echo :
:

C:\Documents and Settings\Administrator\桌面>(
set b=50
set /a f=+1
set s=11
set t=:
call :a
)

C:\Documents and Settings\Administrator\桌面>echo :
:

C:\Documents and Settings\Administrator\桌面>(
set b=50
set /a f=+1
set s=11
set t=:
call :a
)

C:\Documents and Settings\Administrator\桌面>echo :
:

C:\Documents and Settings\Administrator\桌面>(
set b=50
set /a f=+1
set s=11
set t=:
call :a
)

C:\Documents and Settings\Administrator\桌面>echo :
:

C:\Documents and Settings\Administrator\桌面>pause
请按任意键继续. . .



中间的for是干嘛的、、讲述一下、、最后就提取了个冒号、、
作者: er8852973    时间: 2011-8-11 10:36

输入时间 如12:00 然后时间在for循环中循环四次 执行时间自增功能  变成 12:01 12:02 12:03 12:04 然后用at在这四个时间执行 打开播放器的功能
作者: canyuexiaolang    时间: 2011-8-11 10:41

额、、那你这么写也不对啊、、我来改下
作者: er8852973    时间: 2011-8-11 10:43

好啊  帮我改下 顺便请教 我的代码错在哪里呢 实在想不明白啊
作者: canyuexiaolang    时间: 2011-8-11 10:58

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p t=时间格式(00:00):
  4. for /l %%I in (1 1 4) do (
  5. if !b! lss 10 (set b=!t:~-1!) else set b=!t:~-2!
  6.    set s=!t:~0,2!
  7.    set /a b+=1
  8.    if !b! lss 10 (
  9.    set t=!s!:0!b!
  10.    call :a
  11. ) else (
  12.    set t=!s!:!b!
  13.    call :a
  14. )
  15. )
  16. pause
  17. :a
  18. echo !t!
复制代码
不按格式输入会出错。我也没怎么改、、

貌似代码冗长麻烦啊、、嘿嘿、学艺不精、、
作者: canyuexiaolang    时间: 2011-8-11 11:00

1.你应该用变量延迟、、

2.你的那个加法实在不好用,不要新定义变量,直接把b+=1即可。。

3.当09时+=1就是1了、所以我加了if判断是否小于10,如果看不懂这段话直接忽略,以后你会碰到的^_^
作者: hanyeguxing    时间: 2011-8-11 12:07

本帖最后由 hanyeguxing 于 2011-8-11 16:09 编辑

回复 11# canyuexiaolang


    时间运算要注意10进制、12进制、24进制、60进制的问题。

回复 10# er8852973


    你的代码从设计思路上就有问题,必须重新设计,详细代码如下。


回复 10# er8852973


    代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p t=请输入24小时制时间,例如00:08:
  3. set/a t=1%t:~0,2%*60+1%t:~-2%-6100
  4. for /l %%a in (1 1 4) do (
  5.     set/a t+=1,s=100+t/60%%24,f=100+t%%60
  6.     at !s:~-2!:!f:~-2! /interactive "%ProgramFiles%\TTPlayer\TTPlayer.exe"
  7. )
复制代码
或:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p t=请输入24小时制时间,例如00:08:
  3. for /l %%a in (1 1 4) do (
  4.     set/a t=1%t:~0,2%*60+1%t:~-2%-6100+1*%%a,s=100+t/60%%24,f=100+t%%60
  5.     at !s:~-2!:!f:~-2! /interactive "%ProgramFiles%\TTPlayer\TTPlayer.exe"
  6. )
复制代码
1,t+=1 或 1*%%a 每次时间+1分钟
2,注意:当时间超过24小时,则自动减24小时。如果不需要此功能,则去掉 %%24
作者: er8852973    时间: 2011-8-12 03:49

回复 13# hanyeguxing


    谢谢指教 不过我的在设计上是可以执行的 不知道13L说我的代码设计思路不对是指哪里不对 我的代码忘了加延迟变量而已 加上@echo off&setlocal enabledelayedexpansion变可以执行了{ for循环中%号变成!号 }  我的思路是通过字符截取对时间进行计算 而13L是将其转换成进制数字 既将小时和分钟同一成分钟数
作者: er8852973    时间: 2011-8-12 03:50

回复 11# canyuexiaolang


    感谢  11L 你很谦虚
作者: er8852973    时间: 2011-8-12 03:51

回复 12# canyuexiaolang


    谢谢12L提醒我用延迟变量 总是忘记这个延迟变量 学艺不精啊 我 呵呵  对了 在哪里可以找到关于延迟变量的详解
作者: hanyeguxing    时间: 2011-8-12 04:55

本帖最后由 hanyeguxing 于 2011-8-12 04:57 编辑

回复 14# er8852973


    在批处理中,不能直接将不同进制的混合数字,例如时间进行直接运算,以1楼代码为例,除了延迟的问题,还有:
当时间为12:08、12:09时,set b=%t:~-2%,截取为08、09,set /a f=b+1,此时set /a将出现错误
当时间为12:59、时,set b=%t:~-2%,截取为59,set /a f=b+1,运算结果将为12:60,这个时间 at 是无法接受的
因为set /p t= 使得 t是固定的,4次循环时set b=%t:~-2%时b都是一个值,set /a f=%b%+1 和set s=%t:~0,2% 和 set t=%s%:%f% 的结果都将是同一个结果,那么4次循环的意义何在呢?
for 下直接跟标签,将导致at执行5次,而不是4次
作者: er8852973    时间: 2011-8-12 11:00

回复 17# hanyeguxing


    17L关于进制和for下面直接跟标签执行5次的说法很是对的 我执行代码时就是这样的 请问 1,输入08  09时 set/a f=b+1问什么会出现错误 好像输入 8  9前面不带0就好了 这是为什么?2,为什么for下面跟标签会执行5次  请教 谢谢解答 呵呵
作者: er8852973    时间: 2011-8-12 11:00

回复 17# hanyeguxing


    17L关于进制和for下面直接跟标签执行5次的说法很是对的 我执行代码时就是这样的 请问 1,输入08  09时 set/a f=b+1问什么会出现错误 好像输入 8  9前面不带0就好了 这是为什么?2,为什么for下面跟标签会执行5次  请教 谢谢解答 呵呵
作者: er8852973    时间: 2011-8-12 11:39

回复 13# hanyeguxing


    请问 hanyeguxing 这句代码是怎么计算时间的set/a t=1%t:~0,2%*60+1%t:~-2%-6100
%前面的1是怎么回事  还有后面为什么-6100  是在没整明白这算法 呵呵  惭愧 请指教啊
作者: Batcher    时间: 2011-8-12 12:03

回复 19# er8852973


set /?
Numeric values are decimal numbers, unless
prefixed by 0x for hexadecimal numbers, and 0 for octal numbers.
So 0x12 is the same as 18 is the same as 022. Please note that the octal
notation can be confusing: 08 and 09 are not valid numbers because 8 and
9 are not valid octal digits.

作者: hanyeguxing    时间: 2011-8-12 12:06

本帖最后由 hanyeguxing 于 2011-8-12 12:07 编辑

回复 20# er8852973


    以当前时间为12:09为利
set/a t=1%t:~0,2%*60+1%t:~-2%-6100
%t:~0,2%截取前两为为12
1%t:~0,2%前面加1,变成112
1%t:~-2%截取前后位并在前面加1得到109
前面加1是为了使得09和08这样的数字变成109和108以解决的问题
小时前加1导致多出100小时,分钟前加1导致多出100分钟,需要再减去,总计6100分钟
set/a t+=1,s=100+t/60%%24,f=100+t%%60
t+=1以分钟为单位的数字加1
s=100+t/60%%24将此数字转换为小时,即取商的整数部分.其中t/60获得就是此数字,%%24对小时进行修正,例如把24修正为0 。 100+将结果修正为3位数,例如把12或8变成112或108,以在以后截取后两位
f=100+t%%60将获取分钟余数,原理同上
!s:~-2!:!f:~-2!截取
作者: er8852973    时间: 2011-8-12 12:11

回复 22# hanyeguxing


    孤星寒夜 你的这招前面加1是自己想出来的吗 是原创吗 真帮 我服了 我真没想到 这个方法 谢谢 学到了 但还是请告诉我是你想出来的加1这个招来解决进位制的问题吗
作者: missll    时间: 2011-8-13 07:45

膜拜hanyeguxing 大牛。。。
作者: cjiabing    时间: 2011-8-13 22:03

本帖最后由 cjiabing 于 2011-8-13 22:04 编辑

标题:批处理怎样用计划任务定时执行文件?
内容:请问我这个代码有什么不对的地方吗 怎么不能正常执行呢
目的:我要实现的功能是间隔一定时间 就定时执行特定功能

虽然不是该版版主不必操心,可我们这些善良的读者经常被欺骗上当!~
标题问的是一个内容,内容问的是另外一个问题,问题问的是另外一个目的,搞不懂楼主到底想干嘛。

至于间隔定时执行任务,schtasks有一个参数可以实现。如果使用at,需要计算时间差,时间差可以搜索论坛。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2