标题: 批处理怎样用计划任务定时执行文件? [打印本页]
作者: er8852973 时间: 2011-8-8 15:41 标题: 批处理怎样用计划任务定时执行文件?
- set /p t=
-
- for /l %%I in (1 1 4) do (
- set b=%t:~-2%
- set /a f=%b%+1
- set s=%t:~0,2%
- set t=%s%:%f%
- call :a
- )
-
- :a
- at %t% /interactive "C:\Program Files\TTPlayer\TTPlayer.exe"
复制代码
请问我这个代码有什么不对的地方吗 怎么不能正常执行呢
作者: wc726842270 时间: 2011-8-8 22:04
LZ如果对此感兴趣的话可以学一下SCHTASKS命令
作者: Hello123World 时间: 2011-8-10 20:16
- @echo off
- echo 时间格式:23:09
- set /p t=请输入时间:
- at %t% /interactive "C:\Program Files\TTPlayer\TTPlayer.exe"
- ::一个本来人很容易看懂的功能,被写成一个连鬼都看不懂的代码
- 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
- @echo off
- setlocal enabledelayedexpansion
- set /p t=时间格式(00:00):
-
- for /l %%I in (1 1 4) do (
- if !b! lss 10 (set b=!t:~-1!) else set b=!t:~-2!
- set s=!t:~0,2!
- set /a b+=1
- if !b! lss 10 (
- set t=!s!:0!b!
- call :a
- ) else (
- set t=!s!:!b!
- call :a
- )
- )
- pause
- :a
- 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
代码如下:- @echo off&setlocal enabledelayedexpansion
- set/p t=请输入24小时制时间,例如00:08:
- set/a t=1%t:~0,2%*60+1%t:~-2%-6100
- for /l %%a in (1 1 4) do (
- set/a t+=1,s=100+t/60%%24,f=100+t%%60
- at !s:~-2!:!f:~-2! /interactive "%ProgramFiles%\TTPlayer\TTPlayer.exe"
- )
复制代码
或:- @echo off&setlocal enabledelayedexpansion
- set/p t=请输入24小时制时间,例如00:08:
- for /l %%a in (1 1 4) do (
- set/a t=1%t:~0,2%*60+1%t:~-2%-6100+1*%%a,s=100+t/60%%24,f=100+t%%60
- at !s:~-2!:!f:~-2! /interactive "%ProgramFiles%\TTPlayer\TTPlayer.exe"
- )
复制代码
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://www.bathome.net/) |
Powered by Discuz! 7.2 |