cmd // detiene el servicio SÓLO si se está ejecutando; de lo contrario, declara una variable

cmd // detiene el servicio SÓLO si se está ejecutando; de lo contrario, declara una variable

Me gustaría hacer un guión corto que:

  1. Comprueba si los servicios especificados se están ejecutando.
  2. Si lo hacen, entonces deben detenerse (de lo contrario, declarar variables para el último punto).
  3. Luego habrá un código que ya he creado.
  4. Los servicios previamente detenidos deben iniciarse nuevamente (por lo que no quiero iniciarlos todos).

Estoy tratando de determinar si se está ejecutando un servicio.(ejemplo de servicio: bits)

sc query bits | findstr "RUNNING"// si el serviciobitsestá ejecutando la salida es:

STATE : 4 RUNNING

Puedo detener/iniciar el servicio con net stop bits/ net start bits.

Pero, ¿cómo puedo evitar iniciar servicios que no deberían iniciarse?

(Quiero decir que no estaban corriendo temprano).¿Usar 'tokens' de alguna manera?

Lo que hice hasta ahora es:

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

Que puede devolver un valor ("BITS" o NUL), así que supongo que necesito asignarle una variable ahora para uso futuro.

Respuesta1

No es la solución más óptima, pero es un camino a seguir (versión beta)

básicamente quería eliminar la carpeta C:\Windows\SoftwareDistribution

Creé 2 variables (svc_1, svc_2) para verificar si BITS/wuauser se están ejecutando.

si lo hacen (lo hace), entonces se detiene y luego se enciende de nuevo...

@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

información relacionada