cmd // 실행 중인 경우에만 서비스를 중지하고, 그렇지 않으면 변수를 선언합니다.

cmd // 실행 중인 경우에만 서비스를 중지하고, 그렇지 않으면 변수를 선언합니다.

나는 다음과 같은 짧은 스크립트를 만들고 싶습니다.

  1. 지정된 서비스가 실행 중인지 확인합니다.
  2. 그렇다면 중지해야 합니다(그렇지 않으면 마지막 지점에 대한 변수를 선언합니다).
  3. 그러면 제가 이미 생성한 코드가 있을 것입니다.
  4. 이전에 중지된 서비스를 다시 시작해야 합니다(그래서 모든 서비스를 시작하고 싶지는 않습니다).

서비스가 실행되고 있는지 확인하려고 합니다.(서비스 예시 : 비트)

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 폴더를 삭제하고 싶었습니다.

BITS/wuauser가 실행 중인지 확인하기 위해 2개의 변수(svc_1, svc_2)를 만들었습니다.

그렇게 하면 중지되었다가 다시 켜집니다...

@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

관련 정보