中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 紧急求助:如何实现无人干预自动备份系统服务
« [1] [2] »
作者:
标题: 紧急求助:如何实现无人干预自动备份系统服务 上一主题 | 下一主题
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『楼 主』:  紧急求助:如何实现无人干预自动备份系统服务

这是我编写的一个备份系统服务的批处理程序,可成功备份系统服务的状态和启动类型
现有两个问题不能解决:
1、程序运行是为何中途会有停顿,必须键盘按键才能继续运行???
2、如何实现显示状态为START的系统服务的个数???我在第二行末尾加了SET /A NUM1=%NUM1%+1也没有没有起作用,最后NUM1变量的值还是1,为什么会没有参加循环计算??请各位高手指点!!!
备份系统服务.BAT

sc query type= service state= all| findstr /r /C:"SERVICE_NAME:" >tmpsrv.txt

for /f "tokens=2 delims=:" %%j in (tmpsrv.txt) do sc query %%j|findstr STATE>tmpstype.txt && for /f "tokens=3 delims=: " %%s in (tmpstype.txt) do if "%%s"=="RUNNING" @echo sc start %%j>>恢复系统服务列表.bat

for /f "tokens=2 delims=:" %%j in (tmpsrv.txt) do sc query %%j|findstr STATE>tmpstype.txt && for /f "tokens=3 delims=: " %%s in (tmpstype.txt) do if not "%%s"=="RUNNING" @echo sc stop %%j>>恢复系统服务列表.bat

for /f "tokens=2 delims=:" %%j in (tmpsrv.txt) do @( sc qc %%j |findstr  START_TYPE >tmpstype.txt &&  for /f "tokens=4 delims=:_ " %%s in (tmpstype.txt) do echo sc config  %%j start= %%s >>"恢复系统服务列表.bat")

del /q tmpstype.txt
del /q tmpsrv.txt
ren "恢复系统服务列表.bat" "恢复系统服务列表(%date%).bat"

[ Last edited by livesweet on 2007-7-28 at 12:27 PM ]

2007-7-28 04:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 2 楼』:  

自己顶一个先,请高手指教!!

2007-7-28 11:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 3 楼』:  

::服务状态列表 By Slore
@echo off&setlocal EnableDelayedExpansion
sc query type= service state= all| findstr /r "SERVICE_NAME: STATE">tmpsrv.txt
Set flags=0
for /f "tokens=1,2,3,4" %%i in (tmpsrv.txt) do (
if !flags!==0 (Set flags=1&&Set SN=%%i%%j) else Set flags=0&&echo !SN! %%i:%%k %%l
)
::可以自己修改不要SERVICE_NAME: STATE,对应的是tokens的1即%%i
pause

2007-7-28 11:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by slore at 2007-7-28 11:54 AM:
::服务状态列表 By Slore
@echo off&setlocal EnableDelayedExpansion
sc query type= service state= all| findstr /r "SERVICE_NAME: STATE">tmpsrv.txt
Set flags=0
for /f " ...

这个还是计算不了当前正在运行的系统服务的个数

2007-7-28 12:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  

晕~有了这个那个还不容易?

findstr过滤出RUNNING的。。然后统计行数就好了

::服务状态列表 By Slore
@echo off&setlocal EnableDelayedExpansion
sc query type= service state= all| findstr /r "SERVICE_NAME: STATE">tmpsrv.txt
Set flags=0
for /f "tokens=1,2,3,4" %%i in (tmpsrv.txt) do (
if !flags!==0 (Set flags=1&&Set SN=%%i%%j) else Set flags=0&&echo !SN! %%i:%%k %%

l>>tmpsrv1.txt
)
::可以自己修改不要SERVICE_NAME: STATE,对应的是tokens的1即%%i

findstr/C:"RUNNING" tmpsrv1.txt>tmpsrv.txt
for /f %%i in (tmpsrv.txt) do Set /a flags+=1
echo RUNNING中的服务有%flags%个

pause>nul
del tmpsrv.txt
del tmpsrv1.txt

   此帖被 +2 点积分    点击查看详情   
评分人:【 livesweet 分数: +2  时间:2007-7-29 11:38


2007-7-28 12:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by slore at 2007-7-28 12:45 PM:
晕~有了这个那个还不容易?

findstr过滤出RUNNING的。。然后统计行数就好了

::服务状态列表 By Slore
@echo off&setlocal EnableDelayedExpansion
sc query type=  ...

很感激slore,我是老菜来的,现在问题已经解决!是早上我按照你的方法操作时漏了一个符号没写!!
但是第一个问题为何这样???百思不得其解???

[ Last edited by livesweet on 2007-7-28 at 01:55 PM ]

2007-7-28 13:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 7 楼』:  

你的P我运行正常,就是调用SC的次数太多……很慢。。我这个主要是对文本用FOR一次处理好个清单,然后这个清单,有服务名,有启动模式,有运行状态。

所以用findstr筛选你想要的信息就很方便了。

2007-7-28 14:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 8 楼』:  

谢谢slore

2007-7-28 23:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 9 楼』:  

还有个问题啊!!
要查看系统服务的启动类型即START_TYPE好像只能用SC QC命令逐个服务查询???是不是这样的??如果这样要花很多时间的!!!有没有一次可以枚举所有服务启动类型的命令????

2007-7-29 11:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("Services.txt")

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service")
For Each objItem In colItems
    OutStr = OutStr & objItem.Name & " " & objItem.StartMode & " " & objItem.State & vbCrLf
Next
objFile.Write OutStr
objFile.Close

Set
objWMIService = Nothing
Set
colItems = Nothing
Set
objFile = Nothing
Set
objFSO = Nothing

这个可以得到格式:
Alerter Disabled Stopped
ALG Manual Running
AppMgmt Manual Stopped
AudioSrv Auto Running
BITS Manual Stopped
Browser Auto Stopped
CiSvc Manual Stopped
ClipSrv Disabled Stopped
COMSysApp Manual Stopped
CryptSvc Auto Running
DcomLaunch Auto Running
Dhcp Auto Running
dmadmin Manual Stopped
dmserver Auto Running
Dnscache Auto Running
ERSvc Disabled Stopped
Eventlog Auto Running
EventSystem Manual Running
FastUserSwitchingCompatibility Manual Running
helpsvc Auto Running
HidServ Disabled Stopped
HTTPFilter Manual Stopped
ImapiService Manual Stopped
lanmanserver Auto Running
lanmanworkstation Auto Running
LmHosts Auto Running
Messenger Disabled Stopped
mnmsrvc Manual Stopped
MSDTC Disabled Stopped
MSIServer Manual Stopped
NetDDE Disabled Stopped
NetDDEdsdm Disabled Stopped
Netlogon Manual Stopped
Netman Manual Running
Nla Manual Running
NtLmSsp Manual Stopped
NtmsSvc Manual Stopped
PlugPlay Auto Running
PolicyAgent Auto Running
ProtectedStorage Auto Running
RasAuto Manual Stopped
RasMan Manual Running
RDSessMgr Manual Stopped
RemoteAccess Disabled Stopped
RemoteRegistry Disabled Stopped
RfwProxySrv Manual Stopped
RfwService Auto Running
RpcLocator Manual Stopped
RpcSs Auto Running
RSVP Manual Stopped
SamSs Auto Running
SCardSvr Manual Stopped
Schedule Auto Running
seclogon Auto Running
SENS Auto Running
SharedAccess Auto Running
ShellHWDetection Auto Running
Spooler Disabled Stopped
srservice Disabled Stopped
SSDPSRV Manual Running
stisvc Disabled Stopped
SwPrv Manual Stopped
SysmonLog Manual Stopped
TapiSrv Manual Running
TermService Manual Running
Themes Auto Running
TlntSvr Disabled Stopped
TrkWks Auto Running
UMWdf Disabled Stopped
upnphost Manual Stopped
UPS Manual Stopped
VSS Manual Stopped
W32Time Auto Running
WebClient Auto Running
winmgmt Auto Running
WmdmPmSN Manual Stopped
Wmi Manual Stopped
WmiApSrv Manual Stopped
wscsvc Disabled Stopped
wuauserv Disabled Stopped
WZCSVC Auto Running
xmlprov Manual Stopped
如果你了解SQL语句的话可以直接过滤出你想要的某些条件服务……

2007-7-29 12:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 11 楼』:  

发一个备份当前服务的P:
@echo off
rem  get current date and time
for /f "tokens=1, 2, 3, 4 delims=-/. " %%j in ('Date /T') do set FILENAME=srv_%%j_%%k_%%l_%%m
for /f "tokens=1, 2 delims=: " %%j in ('TIME /T') do set FILENAME=%FILENAME%_%%j_%%k.bat

rem get all service name
sc query type= service state= all| findstr /r /C:"SERVICE_NAME:" >tmpsrv.txt
echo Save Service Start State In %FILENAME%
rem save service start state into batch file
rem

echo @echo Restore The Service Start State Saved At %TIME% %DATE% >"%FILENAME%"
echo @pause >>"%FILENAME%"

for /f "tokens=2 delims=:" %%j in (tmpsrv.txt) do @( sc qc %%j |findstr  START_TYPE >tmpstype.txt &&  for /f "tokens=4 delims=:_ " %%s in ( tmpstype.txt) do @echo sc config  %%j start= %%s >>"%FILENAME%")
echo @pause >>"%FILENAME%"

del tmpsrv.txt
del tmpstype.txt

2007-7-29 13:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 12 楼』:  

和原来的一样调用SC好多次……有点慢。

好像和LZ的那段没有什么区别

2007-7-29 13:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 13 楼』:  

先谢了slore和terse!我还有问题迟下回来再问。

2007-7-29 15:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 14 楼』:  

还有一种情况我想只是我机器的特殊情况
为什么以上程序执行老,总是在这几个地方会停下了,必须按键才能继续运行,我作了截图,一共6个地方停下来,而且是关系到三个服务的,一个是显卡服务,一个是声卡服务,还有一个是多媒体的,为什么会停下来啊??能不能解决??

[ Last edited by livesweet on 2007-7-29 at 11:25 PM ]

附件 1: 1.JPG (2007-7-29 23:22, 74.11 K,下载次数: 1)


2007-7-29 23:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
livesweet
初级用户





积分 86
发帖 45
注册 2007-7-27
状态 离线
『第 15 楼』:  

2

附件 1: 2.JPG (2007-7-29 23:22, 67.13 K,下载次数: 1)


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


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



论坛跳转: