cmd // 僅在服務正在執行時停止服務,否則宣告一個變數

cmd // 僅在服務正在執行時停止服務,否則宣告一個變數

我想製作一個簡短的腳本:

  1. 檢查指定的服務是否正在執行。
  2. 如果他們這樣做,那麼他們應該被停止(否則為最後一點聲明變數)。
  3. 然後會有一些我已經創建的程式碼。
  4. 以前停止的服務應該會再次啟動(所以我不想啟動所有服務)。

我正在嘗試確定服務是否正在運行(服務範例:位元)

sc query bits | findstr "RUNNING"// 如果服務位元正在運行輸出是:

STATE : 4 RUNNING

我可以使用/停止/啟動服務net stop bitsnet 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

相關內容