中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-28 18:05
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 紧急求助:如何实现无人干预自动备份系统服务 查看 3,292 回复 19
楼 主 紧急求助:如何实现无人干预自动备份系统服务 发表于 2007-07-28 04:39 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
这是我编写的一个备份系统服务的批处理程序,可成功备份系统服务的状态和启动类型
现有两个问题不能解决:
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 ]
2 发表于 2007-07-28 11:19 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
自己顶一个先,请高手指教!!
3 发表于 2007-07-28 11:54 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
::服务状态列表 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
4 发表于 2007-07-28 12:28 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
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 " ...


这个还是计算不了当前正在运行的系统服务的个数
5 发表于 2007-07-28 12:45 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
晕~有了这个那个还不容易?

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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
livesweet +2 2007-07-29 11:38
6 发表于 2007-07-28 13:52 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
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 ]
7 发表于 2007-07-28 14:04 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
你的P我运行正常,就是调用SC的次数太多……很慢。。我这个主要是对文本用FOR一次处理好个清单,然后这个清单,有服务名,有启动模式,有运行状态。

所以用findstr筛选你想要的信息就很方便了。
8 发表于 2007-07-28 23:15 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
谢谢slore
9 发表于 2007-07-29 11:36 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
还有个问题啊!!
要查看系统服务的启动类型即START_TYPE好像只能用SC QC命令逐个服务查询???是不是这样的??如果这样要花很多时间的!!!有没有一次可以枚举所有服务启动类型的命令????
10 发表于 2007-07-29 12:12 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
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语句的话可以直接过滤出你想要的某些条件服务……
11 发表于 2007-07-29 13:13 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
发一个备份当前服务的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
12 发表于 2007-07-29 13:30 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
和原来的一样调用SC好多次……有点慢。

好像和LZ的那段没有什么区别
13 发表于 2007-07-29 15:12 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
先谢了slore和terse!我还有问题迟下回来再问。
14 发表于 2007-07-29 23:22 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
还有一种情况我想只是我机器的特殊情况
为什么以上程序执行老,总是在这几个地方会停下了,必须按键才能继续运行,我作了截图,一共6个地方停下来,而且是关系到三个服务的,一个是显卡服务,一个是声卡服务,还有一个是多媒体的,为什么会停下来啊??能不能解决??

[ Last edited by livesweet on 2007-7-29 at 11:25 PM ]
附件
1.JPG
15 发表于 2007-07-29 23:22 ·  中国 广东 东莞 电信
初级用户
积分 86
发帖 45
注册 2007-07-27 08:05
18年会员
UID 94111
性别 男
状态 离线
2
附件
2.JPG
论坛跳转: