我想编写一个简短的脚本:
- 检查指定的服务是否正在运行。
- 如果他们这样做那么他们应该被停止(否则为最后一个点声明变量)。
- 然后就会出现一些我已经创建的代码。
- 先前停止的服务应该重新启动(所以我不想启动所有服务)。
我正在尝试确定服务是否正在运行(服务示例:bits)
sc query bits | findstr "RUNNING"
// 如果服务位正在运行输出是:
STATE : 4 RUNNING
我可以使用/停止/启动该服务net stop bits
。net start bits
但是我该如何避免启动不应该启动的服务呢?
(我的意思是他们没有那么早就跑步)。以某种方式使用‘令牌’?
我目前所做的是:
for /f "tokens=2" %s in ('sc query ^| find "SERVICE_NAME" ^| FIND /i "Bits"') do @echo %s` and/or `for /f "tokens=2" %s in ('sc query state^= inactive ^| find "SERVICE_NAME" ^| find /i "Bits"') do @echo %s
它可以返回一个值(“BITS”或NUL),所以我想我现在需要为它分配一个变量以供将来使用
答案1
虽然不是最优解决方案,但这是一种可行的方法(测试版)
基本上我想删除 C:\Windows\SoftwareDistribution 文件夹
创建了 2 个变量 (svc_1、svc_2) 来检查 BITS/wuauser 是否正在运行
如果他们这样做(它确实这样做了)那么他们就会停止然后再次打开......
@echo off
color 8
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³ ³
echo ³ Czyszczenie dysku C: ³
echo ³ ³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo:
:SERVICE_NAME = DISPLAY_NAME
:BITS = Background Intelligent Transfer Service
:wuauserv = Windows Update
set srv_1=0
set srv_2=0
:set srv_3=0
:ewentualnie usunac folder %systemroot%\system32\catroot2
:state= active
for /f "tokens=2" %%1 in ('sc query ^| find "SERVICE_NAME" ^| find /i "BITS"') do (
echo usluga BITS jest uruchomiona
set srv_1=1
)
:for /f "tokens=2" %%1 in ('sc query state^= inactive ^| find "SERVICE_NAME" ^| find /i "BITS"') do (
:echo usluga BITS nie jest uruchomiona
:)
for /f "tokens=2" %%2 in ('sc query ^| find "SERVICE_NAME" ^| find /i "wuauserv"') do (
echo usluga Windows Update jest uruchomiona
set srv_2=1
)
if %srv_1==1 (
net stop BITS
)
if %srv_2==1 (
net stop wuauserv
)
:parametr f usuwa pliki read-only
:parametr s usuwa pliki i (pod)foldery
:parametr q to cichy tryb
rmdir /s /q C:\Windows\SoftwareDistribution
if %srv_1==1 (
net start BITS
)
if %srv_2==1 (
net start wuauserv
)
mkdir C:\windows\ccmcache2
rmdir /s /q C:\windows\ccmcache
ren C:\windows\ccmcache2 ccmcache
del /f /q "C:\Windows\temp\*.*",
del /f /q "C:\Windows\$RECYCLE.BIN",
del /f /q "C:\Program Files\SplunkUniversalForwarder\var\log\splunk\*.dmp",
timeout /t 10
@echo off
cls
color 7
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³ ³
echo ³ Czyszczenie dysku C: ³
echo ³ ³ PRESS [any key] TO EXIT
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo:
:WMIC Windows Management Instrumentation Command-line utility
:WMIC LOGICALDISK GET DeviceID, Size, FreeSpace | find /i "C:"
for /f "tokens=1-3" %%a in ('WMIC LOGICALDISK where "Name='C:'" GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%%b" ^& " size=" ^& FormatNumber^(cdbl^(%%c^)/1024/1024/1024, 2^)^& " GB"^& " free=" ^& FormatNumber^(cdbl^(%%a^)/1024/1024/1024, 2^)^& " GB" > %temp%\tmp.vbs & @if not "%%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs
pause >nul