中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何用批处理来开关服务
« [1] [2] »
作者:
标题: [求助]如何用批处理来开关服务 上一主题 | 下一主题
rcbblgy
初级用户





积分 31
发帖 14
注册 2007-1-20
状态 离线
『楼 主』:  [求助]如何用批处理来开关服务

我知道用sc start/stop 服务名 来开关服务,但是我现在想先判断服务是打开的还是关闭的,要是打开的就关闭服务,要是服务是关闭状态就打开服务,这个怎么来实现?是不是用到query这个参数啊,我刚学批处理,高手们指点一下。

2007-1-23 07:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  


  提示一下:先根据SC QUERY <SERVICENAME>的STATE值来判断,再SC CONFIG <SERVICENAME>配置服务,再来SC START/STOP启动停止服务。


2007-1-23 07:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rcbblgy
初级用户





积分 31
发帖 14
注册 2007-1-20
状态 离线
『第 3 楼』:  

@echo off
sc query vmauthdservice >query.txt
find "state" query.txt |find "4"
if not errorlevel 4 (sc start vmauthdservice) else(sc stop vmauthdservice)

上面的写法只能开不能关,错在哪里?

2007-1-23 07:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
rcbblgy
初级用户





积分 31
发帖 14
注册 2007-1-20
状态 离线
『第 4 楼』:  

我就是不知道怎么用这个值来判断啊

2007-1-23 07:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wiky
新手上路





积分 0
发帖 1
注册 2007-1-20
状态 离线
『第 5 楼』:  

怎么做才对?我也想知道 。

2007-1-23 08:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

  我的系统里面没有你说的 vmauthdservice 服务,这里我以telnet服务为例子吧:
@echo off
for /f "delims=" %%i in ('SC QUERY TLNTSVR^|FIND "STATE"') do (
        echo %%i|find /i "RUNNING" && (
        sc stop tlntsvr
        sc config tlntsvr start= disabled)||(
        sc config tlntsvr start= auto
        sc start tlntsvr)
)
exit/b


2007-1-23 08:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hangyug
初级用户




积分 99
发帖 43
注册 2007-1-12
状态 离线
『第 7 楼』:  

请问lxmxn,那些"半个"括号是什么意思?还有一个括号占了一行,又是什么意思?可否讲解一下?括号是不是有特殊的用法?

[ Last edited by hangyug on 2007-1-22 at 08:54 PM ]

2007-1-23 09:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  


这样发给你看,应该明白了吧?

  Quote:
@echo off
for /f "delims=" %%i in ('SC QUERY TLNTSVR^|FIND "STATE"') do (
        echo %%i|find /i "RUNNING" && (
        sc stop tlntsvr
        sc config tlntsvr start= disabled)||(
        sc config tlntsvr start= auto
        sc start tlntsvr)
)
exit/b



2007-1-23 11:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rcbblgy
初级用户





积分 31
发帖 14
注册 2007-1-20
状态 离线
『第 9 楼』:  

非常感谢,这个服务是虚拟机的服务。我平时把它设成手动,用虚拟机的时候再开服务,所以服务启动类型就不设了,全当知识学了吧,呵呵。

不过还有一些地方不太明白啊,比如"delims=" 、%%i、^,我以前只看过一些简单的批处理教程,只介绍了常用的命令,哪里有比较全面的讲解教程,我想学学。

2007-1-23 23:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ec2049
初级用户





积分 57
发帖 25
注册 2007-1-21
状态 离线
『第 10 楼』:  

lxmxn那个bat的作用:
如果服务已启动就让它停止;
如果服务已停止就让它启动;

是这样吗?

2007-1-24 00:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 11 楼』:  


  Re rcbblgy:
  
  到论坛的教学室去看看吧,里面很多教程的,搜索一下就有的。

  Re ec2049:
 
  是这样的。运行批处理就可以改变服务的开启状态了。


2007-1-24 01:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jasonwang
初级用户





积分 122
发帖 54
注册 2006-11-3
状态 离线
『第 12 楼』:  

2000下没有SC这个命令啊?

2007-1-24 01:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 13 楼』:  


  那就没有办法了,可以搜索一下论坛里面关于配置系统服务的三方命令行工具,我记得有一个原创帖的。


2007-1-24 01:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jasonwang
初级用户





积分 122
发帖 54
注册 2006-11-3
状态 离线
『第 14 楼』:  

@echo off
for /f "delims=" %%i in ('SC QUERY TLNTSVR^|FIND "STATE"') do (     这句看懂了,根据state来做DO后面的工作)
        echo %%i|find /i "RUNNING" && (     如果是"running"状态,   &&是什么呢?
        sc stop tlntsvr                                 SC命令停止TELNET服务
        sc config tlntsvr start= disabled)||(    SC永久配置TELNET为不启用  但||是什么意思呢?
        sc config tlntsvr start= auto              SC启动TELNET为自动,启动TELNET
        sc start tlntsvr)
)
exit/b

2007-1-24 03:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by rcbblgy at 2007-1-23 23:50:
非常感谢,这个服务是虚拟机的服务。我平时把它设成手动,用虚拟机的时候再开服务,所以服务启动类型就不设了,全当知识学了吧,呵呵。

不过 ...

楼主和我一样,呵呵
我喜欢在用vmware才开启那些nat,dhcp服务,所以写了一个脚本检测来开关服务

如果你也是vmware的话很简单,因为这些服务在开启后会在产生进程
像vmnat.exe,只要tasklist|find确认就好了

net start|find也可以啊:D

2007-1-24 05:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: