中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-19 06:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于时间段控制服务的困惑~~谢谢高手指点 查看 2,266 回复 43
16 发表于 2007-04-27 08:02 ·  中国 北京 鹏博士BGP
初级用户
积分 32
发帖 15
注册 2007-04-26 20:57
UID 86561
性别 男
状态 离线
楼上的flyinspace大哥。

能不能解答一下:
set /a at=%time:~0,2%,1/(a/8),1/(16/a)&&net start service||net stop
servic
的含义呢。。

那个a,是。。。。我刚拿才试了一下。提示:

以零为除数的错误。

谢谢啦

[ Last edited by boyhong on 2007-4-26 at 07:09 PM ]
17 发表于 2007-04-27 08:11 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
to:vkill
应该是笔误;
应该是at不是a
18 发表于 2007-04-27 08:14 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
不知道lz在 8:30 分或者17:30分的时候是想停止服务还是开启服务??

这涉及到数字的问题;

大于等于 17点停止服务还是 大于17点停止;

大于等于8:00开启还是 大于8点开启
19 发表于 2007-04-27 08:17 ·  中国 北京 鹏博士BGP
初级用户
积分 32
发帖 15
注册 2007-04-26 20:57
UID 86561
性别 男
状态 离线
TO:版主大哥
保持8:00——17:00这组服务正常运行,其它时间停止这组服务..
但脚本不能关闭,要循环,每天都在自动保持我的这个对这组特定服务的自动启停.

用wscript.sleep来休眠实现循环真是个好主意。

可上下边那个看不太懂。
set /a at=%time:~0,2%,1/(at/8),1/(16/at)&&

[ Last edited by boyhong on 2007-4-26 at 07:29 PM ]
20 发表于 2007-04-27 08:29 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
用flyinspace的这段代码;其中已经改了;
注意是at而不是a;
而且 他 给的延迟时间也太夸张了
60000秒??16个小时丫;
600秒差不多
注意把自己想要控制的service改好名称

@echo off
echo wscript.sleep 600>delay.vbs
:continue
set /a at=%time:~0,2%,1/(at/8),1/(16/at)&&net start service||net stop service
cscript /nologo delay.vbs
goto continue



建议做成系统服务;
避免了这个脚本因为一直开着可能会被人误关;而且一天天的有个窗口开着(即使是最小化)也是不雅观的;
而且下次重启还得双击;
不如做成自启动的系统服务;一切就都不用管了;

[ Last edited by bjsh on 2007-4-26 at 07:35 PM ]
21 发表于 2007-04-27 08:34 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
set /a at=%time:~0,2%,1/(at/8),1/(16/at)&&net start service||net stop service


这句话的是利用了 set /a的连续赋值特性;

当at在 8:00---17:00之外时;就会造成 除数为零的错误;
errorlevel为9169
因此程序执行||后面的停止服务语句;
当处于这段时间时;结果一般为1;errorlevel为0
于是执行 && 后的开启服务语句;

加上循环和延迟 定时检查时间 判断;就达到了你要的效果;

再说一次;强烈建议做成系统服务;于是就算"完美"了
22 发表于 2007-04-27 08:36 ·  中国 北京 鹏博士BGP
初级用户
积分 32
发帖 15
注册 2007-04-26 20:57
UID 86561
性别 男
状态 离线
我刚才去看,set /?了~~HELP文件里对这几个符号的解释太粗了点。。。

谢谢~~在班班的帮助下看懂了~~

做成系统服务////不知怎么做。。。再次麻烦班班出手一下~~谢谢啦

现在成如下了。谢谢

@echo off
echo wscript.sleep 600>delay.vbs
:continue
set /a at=%time:~0,2%,1/(at/8),1/(16/at)&&net start 服务1 net start 服务2 net start 服务3||net stop 服务1 net stop 服务2 net stop 服务3
cscript /nologo delay.vbs
goto continue

[ Last edited by boyhong on 2007-4-26 at 07:40 PM ]
23 发表于 2007-04-27 08:42 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
做成系统服务看这里:

http://www.cn-dos.net/forum/viewthread.php?tid=21426&fpage=1&highlight=runassrv

[ Last edited by bjsh on 2007-4-26 at 07:58 PM ]
24 发表于 2007-04-27 08:44 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
你上面的代码有错;应该为:

@echo off
echo wscript.sleep 600>delay.vbs
:continue
set /a at=%time:~0,2%,1/(at/8),1/(16/at)&&(net start 服务1 & net start 服务2 & net start 服务3)||(net stop 服务1 & net stop 服务2 & net stop 服务3)
cscript /nologo delay.vbs
goto continue

[ Last edited by bjsh on 2007-4-26 at 08:51 PM ]
25 发表于 2007-04-27 08:59 ·  中国 北京 鹏博士BGP
初级用户
积分 32
发帖 15
注册 2007-04-26 20:57
UID 86561
性别 男
状态 离线
谢谢~~我弄好了~~

如下:

sc create 服务名 binPath= 路径 [选项1] [选项2]
26 发表于 2007-04-27 09:02 ·  中国 北京 鹏博士BGP
初级用户
积分 32
发帖 15
注册 2007-04-26 20:57
UID 86561
性别 男
状态 离线
最后关于今天大家对我的帮助,感谢flyinspace大哥的思路,及各位对我的贴子的关注,尤其是bjsh版主手把手~~真诚感谢~~

关于用于实际后的情况,大家得等我用上四五天,然后再回来反馈。

再次感谢。

[ Last edited by boyhong on 2007-4-26 at 08:04 PM ]
27 发表于 2007-04-27 09:07 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
sc create 似乎对批处理不大支持;
反正在我的机器上是启动不起来;

正在试 runassrv
28 发表于 2007-04-27 09:10 ·  中国 北京 鹏博士BGP
初级用户
积分 32
发帖 15
注册 2007-04-26 20:57
UID 86561
性别 男
状态 离线
我的电脑是XP2,可以起来。这个脚本最终是用在另一台WIN2000电脑上的。我现在就去看看。。
29 发表于 2007-04-27 09:21 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
等下吧;
我刚才试了;
很浪费资源的;我服务起来居然占到50%以上;
把那段延迟去掉;基本就不占资源了;

干脆用这个吧;

@echo off
:continue
set /a at=%time:~0,2%,1/(at/8),1/(16/at)&&(net start 服务1 & net start 服务2 & net start 服务3)||(net stop 服务1 & net stop 服务2 & net stop 服务3)
ping -n 60 127.1
goto continue


把他做服务吧;测试不占系统资源;
不过如果去掉了ping -n 60 127.1 占用就几乎100%

[ Last edited by bjsh on 2007-4-26 at 08:45 PM ]
30 发表于 2007-04-27 09:32 ·  中国 北京 鹏博士BGP
初级用户
积分 32
发帖 15
注册 2007-04-26 20:57
UID 86561
性别 男
状态 离线
~~我正在为占用的CPU发愁~~

用ping -n 60 127.1确实缓解了~~

不过那段代码好像有问题,正在试...

试得差不多了~~
确实有些问题。现在时间:20:31
按照脚本来说,应是关闭服务的,,可是看到执行的情况是:

开启服务然后又关闭服务。然后开始延时,又开始先开服务,再停服务。就这样循环。

[ Last edited by boyhong on 2007-4-26 at 08:49 PM ]
论坛跳转: