
Ich möchte ein kurzes Skript erstellen, das:
- Überprüft, ob die angegebenen Dienste ausgeführt werden.
- Wenn dies der Fall ist, sollten sie gestoppt werden (andernfalls deklarieren Sie die Variable/n für den letzten Punkt).
- Dann wird es Code geben, den ich bereits erstellt habe.
- Zuvor gestoppte Dienste sollten erneut gestartet werden (ich möchte sie daher nicht alle starten).
Ich versuche festzustellen, ob ein Dienst ausgeführt wird(Dienstbeispiel: Bits)
sc query bits | findstr "RUNNING"
// wenn der DienstGebisseausgeführt wird, lautet die Ausgabe:
STATE : 4 RUNNING
Ich kann den Dienst mit / stoppen/ net stop bits
starten net start bits
.
Aber wie kann ich vermeiden, Dienste zu starten, die nicht gestartet werden sollten?
(Ich meine, am Anfang waren sie nicht in Betrieb).Irgendwie „Token“ verwenden?
Was ich bisher gemacht habe ist:
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
Das kann einen Wert ("BITS" oder NUL) zurückgeben, also muss ich ihm jetzt wohl eine Variable für die zukünftige Verwendung zuweisen
Antwort1
nicht die optimale Lösung, aber es ist ein Weg (Beta-Version)
grundsätzlich wollte ich den Ordner C:\Windows\SoftwareDistribution löschen
2 Variablen (svc_1, svc_2) erstellt, um zu prüfen, ob BITS/wuauser ausgeführt werden
wenn dies der Fall ist, wird es gestoppt und dann wieder eingeschaltet …
@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