6

サービス「MyServiceName」が実行されているかどうかを確認するバッチ ファイルが必要です。サービスが実行されている場合は、バッチ ファイルでサービスを無効にしてメッセージを表示します。実行されておらず、無効になっている場合は、バッチ ファイルにメッセージを表示して終了させたいと思います。助けてくれてありがとう。

4

3 に答える 3

1

このスクリプトは、サービス名を最初の (唯一の) パラメーターとして使用するか、SVC_NAME 割り当てにハードコードすることができます。sc コマンドの出力は破棄されます。あなたが本当に見たいかどうかはわかりません。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET SVC_NAME=MyServiceName
IF NOT "%~1"=="" SET "SVC_NAME=%~1"

SET SVC_STARTUP=
FOR /F "skip=1" %%s IN ('wmic path Win32_Service where Name^="%SVC_NAME%" get StartMode') DO (
    IF "!SVC_STARTUP!"=="" SET "SVC_STARTUP=%%~s"
)

CALL :"%SVC_STARTUP%" "%SVC_NAME%"
CALL :StopService "%SVC_NAME%"
GOTO :EOF

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:"Boot"
:"System"
:"Auto"
:"Manual"
@ECHO Disabling service '%~1'.
sc.exe config "%~1" start= disabled > NUL
IF NOT ERRORLEVEL 1 @ECHO Service '%~1' disabled.
EXIT /B

:"Disabled"
@ECHO Service '%~1' already disabled.
EXIT /B


::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:StopService
SETLOCAL
SET SVC_STATE=
FOR /F "skip=1" %%s IN ('wmic path Win32_Service where Name^="%~1" get State') DO (
   IF "!SVC_STATE!"=="" SET "SVC_STATE=%%~s"
)
CALL :"%SVC_STATE%" "%~1"
EXIT /B


:"Running"
:"Start Pending"
:"Continue Pending"
:"Pause Pending"
:"Paused"
:"Unknown"
@ECHO Stopping service '%~1'.
sc.exe stop "%~1" > NUL
IF NOT ERRORLEVEL 1 @ECHO Service '%~1' stopped.

EXIT /B

:"Stop Pending"
:"Stopped"
@ECHO Service '%~1' is already stopping/stopped.
EXIT /B
于 2013-06-25T14:02:42.203 に答える